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();
}
具体是怎么回事?
这是有区别的。如果您只使用SaveChanges
,您仍然有一个事务,但它具有数据库服务器的默认隔离级别——对于SQL服务器,它是读取提交的。如果使用默认配置的TransactionScope
,则具有序列化事务隔离级别,但如果使用TransactionScope
的其他构造函数,则可以更改它。
因此,如果您需要控制事务隔离级别,则会有所不同。
无论是保存一个项目还是保存多个项目,TransactionScope
的使用在这里都是多余的。
来自ObjectContext.SaveChanges
:的文档
SaveChanges在交易SaveChanges将滚动支持该交易并抛出如果任何脏的ObjectStateEntry对象不能是坚持。
因此,在您的示例中,您在TransactionScope
上分层,没有任何额外的好处。
现在,如果您有两个单独的ObjectContext
实例,它们具有单独的数据集,您希望确保这两个实例都被保存,那么您绝对需要TransactionScope
来处理对ObjectContext.SaveChanges
的两个调用。
没有,没有区别。SaveChanges
在事务中操作。如果任何脏的ObjectStateEntry
对象无法持久化,SaveChanges
将回滚该事务并引发异常。