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