处置 EntityConnection 是否也在其中处置 DbConnection?

Disposing EntityConnection disposes also DbConnection within?

在我的项目中,我使用其中一种重载来实例化 EntityConnection。

internal static EntityConnection GetEntityConnection(string name)
{

    metadataWorkspace = new MetadataWorkspace(...);

    var connection = new SqlConnection(GetConnection(name));
    connection.AccessToken = OptionalAccessToken(connection);
    if (connection.State != ConnectionState.Open)
    {
        connection.Open();
    }

    using (var ec = new EntityConnection(metadataWorkspace, connection))
    {
        return ec;
    }
}

我想知道,当 EntityConnection 实例由于使用 using 而被自动处置时,内部打开的连接也会被处置吗?

你的问题的答案在于EntityConnection的反映。如果基础连接被处理掉,请仔细研究并亲眼看看。许多对象做类似的事情

public void Dispose()
{
    // dispose underlying objects
    _privateMemeber.Dispose();
}

例如,MySql .NET 提供程序中存在这样的错误。

但一般规则应该是,“如果您尚未创建它,则不要处置它”。在你的情况下, using 应该在 GetEntityConnection

之外使用
using (var ec = new GetEntityConnection(...))

经过你的研究,如果EntityConnection配置底层对象,那应该就足够了。

否则需要创建配置层级

using (var conn = new GetConnection(...))
using (var enConn = new GetEntityConnection(...))
{
   . . . .  .
}