微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处置 EntityConnection 也处置 DbConnection 内?

如何解决处置 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(...))
{
   . . . .  .
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。