我有一个unitofWork类和一个使用它的存储库 类似的东西:
extended_bounds.min
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;
}
}
首先在repo中调用dispose方法,该方法处理并使连接为空。但是当我们到达uow dispose时,连接不再是空的并且再次被处理掉了#39; 我相信我很无聊,但任何人都可以解释
感谢
答案 0 :(得分:1)
声明的正确部分
_conn = uow.Connection;
实际上返回对象引用的副本,而不是引用本身。
因此,您在Repository Dispose方法中设置为null的是对连接的本地引用,这与UnitOfWork实例中的连接引用不同。
如果您确实希望保持此行为(通过存储库代码将UnitOfWork连接属性设置为null),则必须将uow.Connection设置为null,而不是本地引用_conn。