TransactionContext在添加对象时有什么不同

本文关键字:什么 添加 对象 TransactionContext | 更新日期: 2023-09-27 17:57:55

当表中只有一个插入时,TransactionScope有什么不同吗?

是否

MyObjectContext.Messages.Save( message, m => m.ID == message.ID);
MyObjectContext.SaveChanges();

与有任何不同

using( var ts = new TransactionScope() )
{
    MyObjectContext.Messages.Save( message, m => m.ID == message.ID);
    MyObjectContext.SaveChanges();
    ts.Complete();
}

具体是怎么回事?

TransactionContext在添加对象时有什么不同

这是有区别的。如果您只使用SaveChanges,您仍然有一个事务,但它具有数据库服务器的默认隔离级别——对于SQL服务器,它是读取提交的。如果使用默认配置的TransactionScope,则具有序列化事务隔离级别,但如果使用TransactionScope的其他构造函数,则可以更改它。

因此,如果您需要控制事务隔离级别,则会有所不同。

无论是保存一个项目还是保存多个项目,TransactionScope的使用在这里都是多余的。

来自ObjectContext.SaveChanges:的文档

SaveChanges在交易SaveChanges将滚动支持该交易并抛出如果任何脏的ObjectStateEntry对象不能是坚持。

因此,在您的示例中,您在TransactionScope上分层,没有任何额外的好处。

现在,如果您有两个单独的ObjectContext实例,它们具有单独的数据集,您希望确保这两个实例都被保存,那么您绝对需要TransactionScope来处理对ObjectContext.SaveChanges的两个调用。

没有,没有区别。SaveChanges在事务中操作。如果任何脏的ObjectStateEntry对象无法持久化,SaveChanges将回滚该事务并引发异常。

相关文章: