添加对象时 TransactionContext 有什么区别?
当表中只有一个插入时,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();
}
以及具体如何不同吗?
Does TransactionScope
make any difference when there is just one insert in the table?
Is
MyObjectContext.Messages.Save( message, m => m.ID == message.ID);
MyObjectContext.SaveChanges();
any different from
using( var ts = new TransactionScope() )
{
MyObjectContext.Messages.Save( message, m => m.ID == message.ID);
MyObjectContext.SaveChanges();
ts.Complete();
}
and how exactly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有一个区别。如果您只使用 SaveChanges,您仍然有一个事务,但它具有数据库服务器的默认隔离级别 - 对于 SQL 服务器,它是已提交的读。如果您在默认配置中使用
TransactionScope
,则您具有序列化事务隔离级别,但如果您使用TransactionScope
的其他构造函数,则可以更改它。因此,如果您需要控制事务隔离级别,那就会有所不同。
There is a difference. If you use just
SaveChanges
you still have a transaction but it has default isolation level for database server - in case of SQL server it is Read committed. If you useTransactionScope
with default configuration you have Serialized transaction isolation level but you can change it if you use other constructor ofTransactionScope
.So it makes a difference if you need control over transaction isolation level.
无论您是保存一项还是多项,这里使用
TransactionScope
都是多余的。来自
ObjectContext.SaveChanges
的文档:因此,您在示例中对
TransactionScope
进行了分层,但没有任何额外好处。现在,如果您有两个单独的
ObjectContext
实例,其中包含不同的数据集,并且您希望确保这两个实例都已保存,那么您绝对需要在两个对TransactionScope
的调用周围使用TransactionScope
。代码>ObjectContext.SaveChanges。It doesn't matter if you are saving one item or multiple items, the use of a
TransactionScope
is redundant here.From the documentation for
ObjectContext.SaveChanges
:So you are layering on a
TransactionScope
in your example with no added benefit.Now, if you had two separate
ObjectContext
instances with separate sets of data that you wanted to ensure that both were saved, then you would absolutely need theTransactionScope
around both calls toObjectContext.SaveChanges
.不,没有区别。
SaveChanges
在事务中操作。如果任何脏ObjectStateEntry
对象无法持久保存,SaveChanges
将回滚该事务并引发异常。No, there is no difference.
SaveChanges
operates within a transaction.SaveChanges
will roll back that transaction and throw an exception if any of the dirtyObjectStateEntry
objects cannot be persisted.