gpt4 book ai didi

.net - EntityConnection 只能用关闭的 DbConnection 构造

转载 作者:行者123 更新时间:2023-12-04 16:25:07 36 4
gpt4 key购买 nike

“EntityConnection 只能用关闭的 DbConnection 构造”这是我在尝试构建提供开放连接的实体连接时遇到的问题。有一个 transactionscope 打开,我不想打开一个新连接,否则事务将被提升为 dtc 事务,因为我的理解是,如果我在多个 entityConnections 上使用单个 SqlConnection,我不需要 DTC。

所以,我的代码大概是这样的。

提前致谢...

    using (TransactionScope transactionScope = new TransactionScope())
{

using (SqlConnection dwConn = GetDWConnection(user))
{
dwConn.Open();
// I need to do some SQlConnection specific actions first

//EntityConnection specific actions next
Func1(dwConn);
Func2(dwConn); //similar to Func1()
Func3(dwConn); //Similar to Func1()

}

}
Func1(SqlConnection dwConn)
{
using (EntityConnection conn = GetSQLEntityConnection(sqlConnection))
{
ObjectContext objectContext = (ObjectContext)Activator.CreateInstance(objectContextType, new object[] { conn });
//few actions
}
}
private EntityConnection GetSQLEntityConnection(SqlConnection sqlConnection)
{
//few steps
EntityConnection entityConnection = new EntityConnection(entityConnectionStringBuilder.ToString());

EntityConnection sqlEntityConnection = new EntityConnection(entityConnection.GetMetadataWorkspace(),sqlConnection);
return sqlEntityConnection;
}

最佳答案

Jakub 完全正确。您既不能创建 DbContext 也不能创建 EntityConnection 并将打开的 DbConnection 传递给它们。

根据 Diego B Vega’s post这个问题在 EF 6 发布之前不会得到解决(here 你可以投票支持它)

解决方法是在涉及它的任何操作之前打开已经初始化的 EntityConnection

给定 ObjectContext,您可以像这样打开 EntityConnection:

((EntityConnection)objectContext.Connection).Open();

DbContext 的情况下,EntityConnection 可从底层 ObjectContext 获得。代码可能是这样的:

class MyDbContext : DbContext
{
public MyDbContext (DbConnection connection)
: base (connection, contextOwnsConnection: true)
{
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
}

// …
}

class Program
{
public static void Main()
{
var connection = new SqlConnection(CONNECTION_STRING);
using (var database = new MyDbContext(connection))
{
Assert.IsTrue(connection.State == ConnectionState.Open);
}
Assert.IsTrue(connection.State == ConnectionState.Closed);
}
}

关于.net - EntityConnection 只能用关闭的 DbConnection 构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7194106/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com