Устранение объектного контекста в инфраструктуре сущности 4
У меня есть класс сущностей, который автоматически генерируется из моей модели базы данных. Этот класс наследует ObjectContext, который inturn наследует IDisposable.
Я создал репозиторий, который имеет различные методы, которые используют один экземпляр объекта сущности для взаимодействия с базой данных.
Авто сгенерированный класс
public partial class DevEntities : ObjectContext
{
public const string ConnectionString = "name=DevEntities";
public const string ContainerName = "DevEntities";
Класс хранилища
DevEntities db = new DevEntities();
public Customer GetCustomerByID(int id)
{
var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id);
return customers;
}
public Customer GetCustomerByPasswordUsername(string email, string password)
{
var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password);
return customers;
}
Из этого вы можете видеть, что я делаю несколько ссылок на экземпляр db. Мой вопрос: лучше ли создавать экземпляр нового DevEntity в каждом методе, тем самым имея возможность реализовать оператор using и, следовательно, обеспечить правильное удаление или моя текущая реализация в порядке?
Ответы
Ответ 1
Я бы реализовал IDisposable
в классе Repository, поэтому он может распоряжаться ObjectContext
. Если вы каждый раз возвращаете другой ObjectContext, вы можете столкнуться с проблемами при выполнении запросов между этими объектами, поскольку они привязаны к различным ObjectContext
s, что приведет к исключению.
Определение:
public class Repository : IDisposable
{
DevEntities db = new DevEntities();
public Customer GetCustomerByID(int id)
{
var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id);
return customers;
}
public Customer GetCustomerByPasswordUsername(string email, string password)
{
var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password);
return customers;
}
public void Dispose()
{
db.Dispose();
}
}
Использование:
using(Repository r = new Repository())
{
//do stuff with your repository
}
Выполняя это, ваш репозиторий позаботится об утилизации ObjectContext
после его использования.