【发布时间】:2018-09-12 05:30:19
【问题描述】:
我在使用 Entity Framework 6 的项目中的一般模式是
- 为添加创建新实体
- 将实体添加到
DbContext的相关DBSet - 设置这些对象的属性
- 致电
DbContext.SaveChanges()
下面是我的意思的一些伪代码:
// Psuedo code to illustrate process.
void AddProcess()
{
var modelsToAdd = GetModelsToAdd();
try
{
_context.Models.AddRange(modelsToAdd);
_context.SaveChanges();
// If we get here all is good.
}
catch (Exception ex)
{
_context.RemoveRange(modelsToAdd);
throw;
}
finally
{
//....
}
}
我知道SaveChanges() 方法在内部创建了自己的Transaction,因此如果在保存过程中出现异常,它将被回滚。但是,如果在SaveChanges() 期间发生错误,我想要从DbSet 中删除(2)中添加的实体。基本上,就好像“添加”过程从未发生过一样。
如您所见,目前我正在缓存涉及的模型列表,然后在发生异常时将其删除。
我想知道有没有更好的方法让事务自动为我完成这项工作?那么,SaveChanges() 的内部Transaction 回滚是否也可以回滚对DbSet 的任何添加?或者可以使用其他交易吗?
实现我所寻找的最佳/首选方式是什么?我对 EF 还很陌生,所以这可能很明显。
【问题讨论】:
标签: c# entity-framework entity-framework-6 dbcontext