c# - Entity Framework 6 Database First - 如何与 ADO 共享连接和事务

标签 c# database entity-framework transactionscope entityconnection

是否可以在 EF6 DB First 方法和一些 ADO 操作之间共享一个连接(以及事务)?

正如我在这里读到的:https://msdn.microsoft.com/en-us/data/dn456843.aspx#existing 自 EF v6 以来,可以共享连接和事务,但我必须将 SqlConnection 对象作为参数传递给上下文类的构造函数。 但如果我在 DB First 方法中这样做,我会遇到 UnintentionalCodeFirstException。

正如我在这里读到的:https://msdn.microsoft.com/en-us/data/jj592674 当使用 DB First 方法时,我必须使用 EntityConnection 的实例作为上下文类构造函数的参数。但是 EntityConnection 类构造函数只接受关闭的连接。 因此我无法共享事务,因为在传递给上下文类之前必须关闭连接。

我说得对吗,在这种情况下不可能共享一个连接,或者可能还有其他方法?

TransactionScope 仍然是将 EF 6 DB First 和 ADO 中的操作包装在事务中(具有单独的连接)的唯一方法吗?

最佳答案

我不记得我是从哪里得到这个的,但它帮助我在同一个事务中运行 EFSqlBulkCopy。以下是如何通过 Entity Framework 的反射获取事务:

EntityConnection ec = (EntityConnection)Context.Connection;
SqlConnection sc = (SqlConnection)ec.StoreConnection;
SqlTransaction sqlTransaction = null;

var parserProp = sc.GetType().GetProperty("Parser", BindingFlags.NonPublic | BindingFlags.Instance);

if (parserProp != null)
{
    var parser = parserProp.GetValue(sc, null);
    var sqltxProp = parser.GetType().GetProperty("CurrentTransaction", BindingFlags.NonPublic | BindingFlags.Instance);
    var currentTransaction = sqltxProp.GetValue(parser, null);
    sqlTransaction = currentTransaction as SqlTransaction;

    if (sqlTransaction == null)
    {
        var parentProp = currentTransaction.GetType().GetProperty("Parent", BindingFlags.NonPublic | BindingFlags.Instance);
        currentTransaction = parentProp.GetValue(currentTransaction, null);
        sqlTransaction = currentTransaction as SqlTransaction;
    }
}

关于c# - Entity Framework 6 Database First - 如何与 ADO 共享连接和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732977/

相关文章:

c# - 如何获取 ASP.NET Core 2.1 上的 blob 元数据? FetchAttributes 方法看起来没有实现

c# - 一个用户在 "Apps & Features"和 "Programs & Features"中的应用可见性,但对另一个用户不可见

android - 使用游标从 android 中的谷歌应用引擎查询

c# - EntityType '' IdentityUserRole' 没有键定义错误

SQL查询语句中的PHP空格错误

php - 确定主键编号的标准方法是什么?

c# - 不同服务器上的相同数据库

c# - LINQ to Entities 无法识别方法 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' 方法,

c# - Entity Framework 6.1 Code First MySql 实体跟踪在上下文中持续存在

c# - 如何在属性更新后调用方法