实体框架如何处理事务?

发布于 2024-10-19 01:04:37 字数 432 浏览 2 评论 0原文

当您在上下文中调用 SaveChanges 时,实体框架是否使用事务?有没有办法完全关闭交易,或者让某个实体选择退出交易?

AdventureWorksEntities db = new AdventureWorksEntities();

Product p1 = new Product();
// ...

Product p2 = new Product();
// set invalid data

db.Products.AddObject(p1);
db.Products.AddObject(p2);

// what happens when I call this - does it roll back everything?
// can i tell p2 not to participate in the transaction?
db.SaveChanges();

Does Entity Framework use a transaction for when you call SaveChanges on your context? Is there any way to turn off transactions completely, or have a certain entity opt out of a transaction?

AdventureWorksEntities db = new AdventureWorksEntities();

Product p1 = new Product();
// ...

Product p2 = new Product();
// set invalid data

db.Products.AddObject(p1);
db.Products.AddObject(p2);

// what happens when I call this - does it roll back everything?
// can i tell p2 not to participate in the transaction?
db.SaveChanges();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

肥爪爪 2024-10-26 01:04:37

,如果交易尚不存在,EF4 将创建一个新交易。请参阅

http://msdn.microsoft.com/en-us/library/bb896325。 ASPX

当您调用 SaveChanges 时,如果
当前交易存在,实体
框架使用此事务
针对数据源的操作。
否则,它会创建一个新的
操作的交易。你可以
通过使用定义事务
EntityTransaction、事务或
交易范围。

,没有办法使单个实体免于交易。

不确定你的第三个问题 - 关于是否可以完全关闭交易,但我猜不是基于上面的摘录。

我知道这不是您想听到的答案,但如果您希望无论 P1 是否成功都保存 P2,您需要将 P2 保存到不同的对象上下文中。

Yes, EF4 will create a new transaction if one does not already exist. See

http://msdn.microsoft.com/en-us/library/bb896325.aspx

When you call SaveChanges, if a
current transaction exists, the Entity
Framework uses this transaction for
operations against the data source.
Otherwise, it creates a new
transaction for the operation. You can
define transactions by using
EntityTransaction, Transaction, or
TransactionScope.

No, there is no way to exempt a single entity from the transaction.

Not sure about your third question - about whether you can turn off transactions completely, but I'm guessing not based on the above excerpt.

I know this isn't the answer you wanted to hear, but if you want P2 to save regardless of whether P1 succeeds, you would need to save P2 into a different object context.

甜`诱少女 2024-10-26 01:04:37

关于关闭交易的最新问题。
尝试使用 Suppress TransactionScopeOption 创建 TransactionScope 以关闭事务完全针对代码块。查看此线程 了解更多信息。

Concerning the latest question about turning the transactions off.
Try to create TransactionScope with Suppress TransactionScopeOption to turn off the transactions completely for the code block. Take a look at this thread for some more information.

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