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

标签 entity-framework stored-procedures objectcontext

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

目标是应用对象更改并调用存储过程,该过程对数据库执行一些“魔术”,但是,如果出现问题(无论是 SaveChanges 还是 SP 执行),根本不会提交任何更改。

最佳答案

脚步:

  • 创建上下文
  • 从上下文中获取连接
  • 创建事务(TransactionScope)
  • 打开连接(将连接登记到在 3. 中创建的环境事务中,并防止上下文关闭连接)
  • 做 SaveChanges()
  • 执行您的存储过程
  • 提交交易
  • 关闭连接

  • 一些代码(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();
            }
        }
    }
    

    关于entity-framework - 使用 SaveChanges 的相同事务从 EF 调用 SP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593450/

    相关文章:

    c# - 多个数据库的代码优先迁移?

    c# - 合并到语句和 Entity Framework

    entity-framework - EF 匿名对象查询返回空集合而不是空集合

    sql - SQL Server 中的 For 循环和 if else 语句

    c# - 反射(reflect) ObjectContext 中的所有更改而不持久化到数据库

    c# - EF不会在SaveChanges上更新相关实体

    c# - 如何在单个事务下获得两个工作单元

    c# - Entity Framework : Unable to create a constant value of type **. 此上下文中仅支持原始类型或枚举类型

    mysql - VB.NET存储过程中的dbnull OUT参数

    mysql - 尝试插入表然后更新同一存储过程中的字段