单元工作,存储库和处理连接

时间:2015-10-27 12:49:44

标签: c# repository sqlconnection

我有一个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; 我相信我很无聊,但任何人都可以解释

感谢

1 个答案:

答案 0 :(得分:1)

声明的正确部分

_conn = uow.Connection;

实际上返回对象引用的副本,而不是引用本身。

因此,您在Repository Dispose方法中设置为null的是对连接的本地引用,这与UnitOfWork实例中的连接引用不同。

如果您确实希望保持此行为(通过存储库代码将UnitOfWork连接属性设置为null),则必须将uow.Connection设置为null,而不是本地引用_conn。