我正在开发一个使用Entity Framework 4.0的组件。
在特定情况下,我需要使用TransactionScope
。
try
{
using (TransactionScope t = new TransactionScope())
{
myEntity.MyObjectsOne.Add(new MyObjectOne());
myEntity.MyObjectsTwo.Add(new MyObjectTwo());
myEntity.SaveChanges();
throw new Exception();
t.Complete();
}
}
catch (Exception e)
{
// What should I do?
}
当交易失败并因此未完成时,myEntity仍将反映所做的更改,即添加MyObjectOne
和MyObjectTwo
。
在这种情况下,最佳做法是什么,以避免不一致?
答案 0 :(得分:5)
执行您需要做的事情的通常方法是在catch块中处置并重新加载您的实体,这样除非范围正确提交,否则您的实体会在应用任何更改之前重新加载
请参阅此问题和所有答案以获取更多详细信息:Undo changes in entity framework entities