У меня была такая же проблема, но моя проблема с решением @ Slauma (хотя и велика в некоторых случаях) заключается в том, что она рекомендует передать контекст в службу, что подразумевает, что контекст доступен из моего контроллера. Это также создает плотную связь между моим контроллером и сервисными слоями.
Я использую Injection Dependency для ввода слоев сервиса / репозитория в контроллер и, как таковой, не имеет доступа к контексту с контроллера.
Мое решение состояло в том, чтобы слои службы / репозитория использовали один и тот же экземпляр контекста - Singleton.
Контекст Singleton Class:
Ссылка: http://msdn.microsoft.com/en-us/library/ff650316.aspx и http://csharpindepth.com/Articles/General/Singleton.aspx
public sealed class MyModelDbContextSingleton
{
private static readonly MyModelDbContext instance = new MyModelDbContext();
static MyModelDbContextSingleton() { }
private MyModelDbContextSingleton() { }
public static MyModelDbContext Instance
{
get
{
return instance;
}
}
}
Класс репозитория:
public class ProjectRepository : IProjectRepository
{
MyModelDbContext context = MyModelDbContextSingleton.Instance;
Существуют другие решения, такие как создание экземпляра контекст один раз и передать его в конструкторы слоев службы / репозитория или другое, о котором я читал, в котором реализуется шаблон «Единица работы». Я уверен, что есть еще ...