Ссылки Entity Framework, Многоуровневое приложение - PullRequest
2 голосов
/ 30 ноября 2011

Я настроил свое приложение MVC с отдельными библиотеками классов для моего домена (POCO) и репозиториями. Теперь мой DbConxet в настоящее время находится на уровне домена, и я хотел бы добавить следующее:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

но он не может найти DbModelBuilder. Теперь я проверил свои ссылки и заметил, что это ссылка на EFCodeFirst0.8 / lib / EntityFramework.dll. Когда я изменил это на EntityFramework4.2.0.0 / lib / EntityFramework.dll, DbModelBuilder был доступен, но я получаю ошибки, потому что другие проекты в моем решении MVC и Repo) ссылаются на оригинальную DLL. Поэтому я обновляю их, но затем возникает проблема с уровнем MVC в App_Start / SQLCEEntityFramework.cs

Что я сделал не так ?! Должен ли я иметь OnModelCreating в другой части моего приложения и сбросить все ссылки на оригинальный файл EFCodeFirst0.8 / lib / EntityFramework.dll? Или исправить ошибки в App_Start / SQLCEEntityFramework.cs?

Спасибо всем,

Джеймс

1 Ответ

0 голосов
/ 30 ноября 2011

Вы делаете это неправильно:)

На самом деле нет никакого смысла в POCO, шаблоне хранилища и всем том, что предназначено для невежества сопротивления , когда выиметь всю структуру ссылок на сущности, и ваш домен связан с ней.

Ваш домен должен быть чистой библиотекой классов (с такими вещами, как componentmodel, dataannotations, конечно) без ссылки на EF.

Тогда вы должны иметь«контракт» (то есть интерфейс в другой библиотеке классов) между вашим приложением MVC и «всеми возможными репозиториями» - также независимый от EF.

И, наконец, у вас есть «одна конкретная реализация» этого контракта - ваш EFрепозиторий.Это должен быть единственный проект, ссылающийся на библиотеку EF.

Дело в том, что если завтра придет ваш босс и скажет: «Хорошо, мы переключаемся на nhibernate», вы можете воспроизвести «нет проблем, я просто пишу другой репозиторий, реализующийэтот интерфейс с ним и изменить 1 строку в конфигурации контейнера IoC ".И в качестве бонуса, вы можете обновить свою ссылку EF только в 1 месте:)

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