在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一次性发送所有命令对于交易,通过单一连接,因此只使用一次往返)。
答案 0 :(得分:0)
不,没有办法自动执行此操作。 EF在单个事务中提交所有更改,这意味着它是全有或全无的事情。
如果您需要此行为,则必须在添加的每条记录之后保存更改。
原因是EF不知道数据中构成“交易”的内容。它可能是一行,也可能是几个表中的几行。 EF甚至不会尝试了解您的交易要求。如果需要,你必须手动完成。