首页 新闻 会员 周边 捐助

Entity Framework中的批量提交与事务处理

1
悬赏园豆:20 [已解决问题] 解决于 2013-04-18 11:53

看到网上有很多转载这样的文章

但是在代码中并没有

context.SaveChanges(false)

以及

context.AcceptAllChanges()

请问是怎么回事。难道网上那些文章是虚假的吗

其次如果真遇到此问题该怎么办呢:就是有两个Context领域

    //Do something with context1

    //Save and discard changes
    context1.SaveChanges();

    //Do something with context2

    //Save and discard changes
    context2.SaveChanges();

想当context2.SaveChanges() 失败时 回滚context1.SaveChanges();应如何编写代码呢

芒果の冰的主页 芒果の冰 | 初学一级 | 园豆:187
提问于:2013-04-18 10:43
< >
分享
最佳答案
1
    using (TransactionScope scope = new TransactionScope())
    {
       // do something...
       db.SaveChanges();
       scope.Complete();
    }

现在所有事务,不管是逻辑的还是ado的都被抽象到TransactionScope了,具体的你可以看看这个类的msdn解释,上面的两个方法都是过时的,这个类试用所有版本的EF。scope在complete前出现任何问题会自动rollback。

收获园豆:10
today4king | 老鸟四级 |园豆:3499 | 2013-04-18 11:12
其他回答(4)
0

自己会回滚,不用显示 编写。

DbContext 是SaveChanges()
ObjectContext有一个SaveChanges(bool。。。)

收获园豆:3
Qlin | 园豆:2403 (老鸟四级) | 2013-04-18 10:52

他自己不会回滚的 已经测试过了。

那么用 code first 的 DbContext

就没办法了吗

支持(0) 反对(0) 芒果の冰 | 园豆:187 (初学一级) | 2013-04-18 11:02

@芒果の冰: 

我倒没测试过,一直 说SaveChange就是一个事务,你贴代码看看

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-04-18 11:19
0
嵌套
using
(var tran1 = context1.Connection.BeginTransaction()) { using(var tran2 = context2.Connection.BeginTransaction()) {    try{ tran2 .Commit(); tran1.Commit(); } catch { tran2 .Rollback(); tran1.Rollback(); } } }
收获园豆:3
geass.. | 园豆:1821 (小虾三级) | 2013-04-18 10:53

用 DbContext 呢 不存在这个属性啊

Connection.BeginTransaction()
支持(1) 反对(0) 芒果の冰 | 园豆:187 (初学一级) | 2013-04-18 11:04

@芒果の冰: 是 DB.BeginTransaction(),而不是 DB.Connection.BeginTransaction()  

(DB即DbContext)

支持(1) 反对(0) "Memory. | 园豆:206 (菜鸟二级) | 2013-07-10 13:46
0

好高深的问题,我都没有用过Entity Framework ,学习了

收获园豆:4
淘@淘 | 园豆:602 (小虾三级) | 2013-04-18 11:39
0

 using (IDbTransaction transaction = DB.BeginTransaction())                

{                    

        

 1   using (IDbTransaction transaction = DB.BeginTransaction())
 2                 {
 3                     try
 4                     {
 5 
 6                         transaction.Commit();
 7                     }
 8                     catch (Exception)
 9                     {
10                         transaction.Rollback();
11                     }
12                 }

 这样就可以在EF中使用事物了!

transaction.Commit();

                    transaction.Rollback();                 }

"Memory. | 园豆:206 (菜鸟二级) | 2013-07-10 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册