处置 EntityConnection 也处置 DbConnection 内?

问题描述

在我的项目中,我使用重载之一来实例化 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(...))
{
   . . . .  .
}