使用SaveChanges的相同事务从EF调用SP

时间:2012-11-27 21:31:44

标签: entity-framework stored-procedures objectcontext

有人知道如何使用objectContext SaveChanges方法(EntityFramework 5)的相同事务调用StoredProc吗?

目标是应用对象更改并调用在DB上执行某些“魔法”的存储过程,但是,如果出现问题(使用SaveChanges或使用SP执行),将不会进行任何更改

1 个答案:

答案 0 :(得分:3)

步骤:

  1. 创建上下文
  2. 从上下文获取连接
  3. 创建交易(TransactionScope)
  4. 打开连接(将连接到3中创建的环境事务连接,并防止通过上下文关闭连接)
  5. 执行SaveChanges()
  6. 执行存储过程
  7. 提交交易
  8. 关闭连接
  9. 一些代码(MyContext派生自DbContext):

    using (var ctx = new MyContext())
    {
        using (var trx = new TransactionScope())
        {
            var connection = ((IObjectContextAdapter)ctx).ObjectContext.Connection;
            try
            {
                ctx.Entities.Add(new MyEntity() { Number = 123 });
                ctx.SaveChanges();
    
                ctx.Database.ExecuteSqlCommand("INSERT INTO MyEntities VALUES(300)");
                trx.Complete();
            }
            finally
            {
                connection.Close();
            }
        }
    }