[英]unitofwork, repositories and disposing of connections
我有一个unitofWork类和一个使用该类的存储库:
private SqlConnection _conn;
private TransactionScope _ts;
public UnitOfWork(SqlConnection conn, TransactionScope ts)
{
_ts = ts;
_conn = conn;
_conn.EnlistTransaction(Transaction.Current);
}
public SqlConnection Connection
{
get { return _conn; }
}
public void Save()
{
_ts.Complete();
}
#region IDisposable
public void Dispose()
{
if (_conn != null)
{
_conn.Dispose();
_conn = null;
}
if (_ts != null)
{
_ts.Dispose();
_conn = null;
}
}
SqlConnection _conn;
public Repository(IUnitOfWork uow)
{
_conn = uow.Connection;
}
// some methods
public void Dispose()
{
if (_conn != null)
{
_conn.Dispose();
_conn = null;
}
}
我正在这样使用
using (var uow = new UnitOfWork())
{
using (var repo = new Repository(uow))
{
if (repo.UpdateStuff())
{
uow.Save();
}
}
}
首先在存储库中调用dispose方法,该方法处理并清空连接。 但是,当我们开始处置时,连接不再为空,并且再次“处置”,我确定我很呆板,但是任何人都可以解释一下
谢谢
声明的正确部分
_conn = uow.Connection;
实际上返回对象引用的副本,而不是引用本身。
因此,在Repository Dispose方法中设置为null的是对连接的本地引用,这与UnitOfWork实例中的连接引用不同。
如果您确实想保留此行为(存储库代码将UnitOfWork Connection属性设置为null),则必须将uow.Connection设置为null,而不是本地引用_conn。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.