• Entity Framework 的事务


    一个db.SaveChanges()相当于一个事务,多个db.SaveChanges()保证操作完整性则需要使用事务

    在Entity Framework 中使用事务,事务只会对数据库操作进行回滚,不会对内存操作做回滚

    1.一个db.SaveChanges():

    ModelEntity集 db =new ModelEntity集();

    Entity e=new Entity();

    e.属性赋值……;

    db.SaveChanges();

    2.多个db.SaveChanges():

    添加引用:System.Transactions

    using(var scope = new System.Transactions.TransactionScope()){

    各种逻辑属性赋值处理……;

    dbA.SaveChanges();

    dbB.SaveChanges();

    scope.Complete();   //提交事务,如果有问题则自动回滚

    }

    以下转自:http://www.cnblogs.com/hyl8218/archive/2011/10/10/2205576.html

    在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。

    要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。

     SaveChanges(false) 只是通知EF需要对数据库执行的操作,在内存中是属于挂起状态,在必要的时候是可以撤销的,比如AcceptAllChange()提交为真正成功,EF将撤销SaveChanges(false)的操作。

    而在处理分布式事务操作的时候,就有必要使用TransactionScope 来处理了,很多时候我们会这样写:

    using (TransactionScope scope = new TransactionScope())
    {
        //Do something with context1
        //Do something with context2

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

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

        //if we get here things are looking good.
        scope.Complete();
    }
    但是这样写是有风险的,假 

    如context1.SaveChanges()成功了,context2.SaveChanges()却是有问题的,我们在scope.Complete()提交事务的时候就会终止,而Context1已经成功执行了

    这可能不一定符合我们的需要。如果我们需要 context1、context2要不同时执行成功,要不都不成功,我们需要对代码作小小的调整,如用下面的代码: 

    using (TransactionScope scope = new TransactionScope())
    {
        //Do something with context1
        //Do something with context2

        //Save Changes but don't discard yet
        context1.SaveChanges(false);

        //Save Changes but don't discard yet
        context2.SaveChanges(false);

        //if we get here things are looking good.
        scope.Complete();
        context1.AcceptAllChanges();
        context2.AcceptAllChanges();

    }
    我们用SaveChanges(false)先将必要的数据库操作命令发送给数据库,这是注意context1与context2并没有真正发生改变,如果事务终止,自动回滚,两者的更改都没有真正提交到数据库,所以是可以成功回滚的。

    在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。

    要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。

     
  • 相关阅读:
    在jenkins和sonar中集成jacoco(一)--使用jacoco收集单元测试的覆盖率
    持续集成一天一美元
    在jenkins和sonar中集成jacoco(二)--在jenkins中生成jacoco覆盖率报告
    day02--课后练习
    python之路-day02
    day01--课后练习
    python之路-day01
    python-FTP程序
    python-选课系统
    python- ATM与购物商城
  • 原文地址:https://www.cnblogs.com/xuxin-1989/p/4514287.html
Copyright © 2020-2023  润新知