2009-08-09 59 views
0

我正在使用EntLib 4.1。需要明確結算?

_db = DatabaseFactory.CreateDatabase("DbName"); 
DbCommand dbCommand = _db.GetStoredProcCommand("someProcedure"); 
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id); 
result = _db.ExecuteNonQuery(dbCommand); 

執行任務後,我需要處置_db對象,如:

finally 
{ 
    _db = null; 
} 

...或將EntLib框架自動處理呢?

+0

置之不理,很少需要將變量明確地設置爲null。請參閱:http://blogs.msdn.com/b/csharpfaq/archive/2004/03/26/97229.aspx – 2010-08-18 07:06:03

回答

2

正在執行_db = null不會處理該對象。

您必須執行_db.Dispose()或使用using塊。

垃圾回收會在非確定性時間處理對象,但只要您創建實現IDisposable的對象,就應該確保始終調用Dispose()(當然,除非您將其交給一個對象或其他承諾這樣做的函數)。

在這種情況下,很容易發現工廠無法知道何時完成對象,因此您必須自己處理它。

0

當超出範圍時,垃圾回收將處理該對象。所以你的代碼可以工作,但這不是最好的解決方案。

將數據庫對象的創建置於using語句中會更好。

3

我知道這是古代的歷史,但我不能離開這些答案。

你這樣做不是需要配置數據庫實例。它甚至不實現IDisposable。

需要配置您創建的顯式DbCommand對象。