簡體   English   中英

工作單元,存儲庫和連接的處置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM