如何在EF Code First中修改事务行为

时间:2013-02-08 13:31:11

标签: entity-framework

在Code-First Entity Framework中,有没有办法修改事务行为,以便它不会丢弃所有更改,而是将所有更改保持到失败点?

例如:

foreach {var objectToSave in ArrayOfEntityObjects)
{
     MyContext.Insert(objectToSave);
}
try
{
     MyContext.SaveChanges();
}
catch (Exception x)
{
    //handling code
}

在上面的例子中,假设数组是一个包含100个对象的数组,并且在项目50上发生了错误,我想保留那些成功的数组,至少到达失败点。知道我们在foreach循环的每次迭代期间执行MyContext.SaveChanges()命令来执行此操作,但我们希望在一次提交中提交到数据库的性能提升(我们理解的是,EF一次性发送所有命令对于交易,通过单一连接,因此只使用一次往返)。

1 个答案:

答案 0 :(得分:0)

不,没有办法自动执行此操作。 EF在单个事务中提交所有更改,这意味着它是全有或全无的事情。

如果您需要此行为,则必须在添加的每条记录之后保存更改。

原因是EF不知道数据中构成“交易”的内容。它可能是一行,也可能是几个表中的几行。 EF甚至不会尝试了解您的交易要求。如果需要,你必须手动完成。