Чтобы сделать это как можно более эффективным ресурсом без внедрения зависимостей, я бы предложил вам реализовать частное свойство с отложенной загрузкой для контекста объекта.
private ObjectContext _context;
private ObjectContext Context
{ get
{
return _context ?? (_context = new ObjectContext());
}
}
Далее, сделайте ваш репозиторий реализующим IDisposable
и позаботьтесь о контексте объекта в вашем методе dispose:
public Repository : IDisposable
{
...
public void Dispose()
{
_context.Dispose();
}
}
Затем вы просто используете свойство во всех ваших методах и включаете использование вашего репозитория в using
операторов.
Чтобы уменьшить трафик в базу данных, вы также можете выделить сохранение в отдельный метод в хранилище, который просто перенаправляет вызов в контекст объекта. Таким образом, вы получаете больше контроля над , когда данные сохраняются в слое пользовательского интерфейса, даже если вы не контролируете how . Это означает, что вы могли бы сделать
using (var repo = new Repository())
{
repo.AddSomeStuff("this", "is", true);
repo.ChangeSomethingElse("yes, please");
repo.Save();
}
и будет только один вызов из EF в базу данных. С другой стороны, если вы делаете
using (var repo = new Repository())
{
repo.AddSomeStuff("this", "is", true);
repo.ChangeSomethingElse("yes, please");
}
ничего не происходит, что может сбить с толку.