У меня есть проект на 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
выражение " using
" и создаю еще один DBcontext в памяти. Когда сборщик мусора утилизирует их? Кто-нибудь знает?
Но есть альтернативное использование методов менеджера. Мы создаем глобальную переменную:
private readonly MyEntities db = new MyEntities();
и использовать DBcontext в каждом методе без выражения " using
". И метод выглядит так:
public Item GetItem(long itemId)
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
Вопросы:
- Как правильно использовать переменную DBcontext?
- Что если мы не будем
usage
выражение "usage
" (потому что оно влияет на производительность) - GC сделает все для этого?
Я новичок в использовании EF и до сих пор не нашел однозначного ответа на этот вопрос.