「EntityConnection は、閉じた DbConnection でのみ構築できます」これは、開いた接続を提供する entityconnection を構築しようとしたときに発生する問題です。transactionscope が開いていて、新しい接続を開きたくない場合、または複数の entityConnections で単一の SqlConnection を使用する場合、DTC は必要ないことを理解しているため、トランザクションは 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;
}