![](/img/trans.png)
[英]EF(entity framework) "using" statement and "try catch" withing each other
[英]EF (entity framework) usage of “using” statement
我有一個關於MVC的項目。 我們為數據庫交易選擇了EF。 我們為BLL層創建了一些管理器。 我找到了很多例子,其中using
“ using
”語句,即
public Item GetItem(long itemId)
{
using (var db = new MyEntities())
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
}
這里我們創建一個DBcontext MyEntities()
的新實例。 我們使用“ using
”以“確保正確使用IDisposable對象”。
這只是我經理中的一種方法。 但我有十多個。 每次我從管理器調用任何方法時,我將使用“ using
”語句並在內存中創建另一個DBcontext。 垃圾收集器(GC)什么時候處理它們? 有人知道嗎?
但是管理器方法有其他用法。 我們創建一個全局變量:
private readonly MyEntities db = new MyEntities();
並且在沒有“ using
”語句的每個方法中使用DBcontext。 方法看起來像這樣:
public Item GetItem(long itemId)
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
問題:
usage
”聲明(因為它會影響性能)怎么辦 - GC會為此做些什么? 我是EF使用中的“新手”,但仍然沒有找到這個問題的明確答案。
我想你會發現許多暗示這種風格的模式。 不只是我或Henk DBContext處理
使用DBContext變量的正確或最佳實踐方法是使用。
using (var db = new MyEntities())
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
好處是許多事情都是我們自動完成的。 例如,一旦完成代碼塊,就會調用dispose。
上下文的生命周期在創建實例時開始,在實例處理或垃圾收集時結束。 如果您希望將上下文控制的所有資源放置在塊的末尾,請使用。 使用時,編譯器會自動創建一個try / finally塊,並在finally塊中調用dispose。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.