Абстрагирование доступа к Entity-Framework - PullRequest
1 голос
/ 04 июня 2011

У меня есть объект в EF, называемый Registry, который я использую для добавления всевозможных полезных вещей. Мой типичный запрос выглядит так:

db.Registry
   .Where(x => x.Domain == "SomeDomain" && x.Key == "SomeKey")
   .Select(x => x.Value)
   .Single();

где db - переменная типа EFContainer. Вместо того, чтобы иметь такой запрос повсюду, я хотел бы написать что-то гораздо более простое, например:

Registry.Get(Key: "SomeKey", Domain: "SomeDomain")

но проблема в том, что для того, чтобы этот метод получил доступ к базе данных, ему необходимо создать экземпляр EFContainer, и когда это происходит, я начинаю иметь ошибки, которые IEntity change tracker не может обработать второе соединение. Я полагаю, что мог бы передать свою переменную db методу, но это было бы странно.

Какой хороший способ сделать это?

1 Ответ

3 голосов
/ 04 июня 2011

Типичный способ сделать это - создать RegisterRepository и внедрить либо EFContainer в конструктор хранилища, либо внедрить механизм создания контейнеров.

public class RegistryRepository {
public RegistryRepository(EFContainer db) {
  this.db = db;
}

readonly EFContainer db;

public Registry Get(string domain, string key) {
// implementation here
}

}

В этой реализации вы должны рассмотреть, как вы получите ссылку на репозиторий и, следовательно, как будет построен репозиторий.Вы можете использовать каркас для внедрения зависимостей , чтобы зарегистрировать контейнер EF и репозиторий с надлежащей областью действия.Например, если вы разрабатываете приложение ASP.NET, контекст EF будет ограничен HTTP-запросом, как и хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...