實體框架上下文應該使用語句嗎?

c# entity-framework

Entity Framework上下文對象實現Dispose()方法,該方法“釋放對像上下文使用的資源”。它真的有什麼作用?總是將它放入using {}語句會不會是一件壞事?我已經看到它使用和不使用using語句。

我特意要在WCF服務方法中使用EF上下文,創建上下文,做一些linq並返回答案。

編輯:似乎我不是唯一一個對此感到疑惑的人。另一個問題是Dispose()方法中真正發生了什麼。有人說它關閉了連接,有些文章沒有說。這是怎麼回事?

一般承認的答案

如果創建上下文,則必須稍後進行處理。如果你應該使用using語句取決於上下文的生命週期。

  1. 如果在方法中創建上下文並僅在此方法中使用它,則應該使用using語句,因為它為您提供了異常處理而無需任何其他代碼。

  2. 如果你使用上下文更長的時間 - 也就是生命時間不受方法執行時間的約束 - 你不能使用using語句而你必須自己調用Dispose()並註意你總是調用它。

Dispose()對對像上下文做了什麼?

我沒有查看代碼,但至少我認為它可以用它的底層套接字或傳輸機制使用的任何資源來關閉數據庫連接。


熱門答案

Per Progamming Entity Framework :“您可以顯式地處置ObjectContext或等待垃圾收集器完成工作。”

因此,簡而言之,雖然不需要using語句,但如果您知道使用ObjectContext已經完成了最佳實踐,因為資源立即被釋放而不是等待垃圾回收。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因