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