添加对象时 TransactionContext 有什么区别?

发布于 2024-11-10 23:00:31 字数 421 浏览 0 评论 0原文

当表中只有一个插入时,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤独陪着我 2024-11-17 23:00:31

有一个区别。如果您只使用 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 use TransactionScope with default configuration you have Serialized transaction isolation level but you can change it if you use other constructor of TransactionScope.

So it makes a difference if you need control over transaction isolation level.

就此别过 2024-11-17 23:00:31

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

来自 ObjectContext.SaveChanges 的文档:

SaveChanges 在一个
交易。 SaveChanges 将滚动
返回该交易并抛出一个
如果有任何脏的,则例外
ObjectStateEntry 对象不能是
坚持下来了。

因此,您在示例中对 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:

SaveChanges operates within a
transaction. SaveChanges will roll
back that transaction and throw an
exception if any of the dirty
ObjectStateEntry objects cannot be
persisted.

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 the TransactionScope around both calls to ObjectContext.SaveChanges.

西瑶 2024-11-17 23:00:31

不,没有区别。
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 dirty ObjectStateEntry objects cannot be persisted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文