2015-06-24 2 views
2

Ради вопроса, я проект структурирован следующим образом, где каждый слой карты к проекту в моей визуальной студии решения:Ссылки на сборку по проектам - необходимость в нескольких ссылках на Entity Framework?

  • Presentation Layer
  • Business Logic Layer
  • уровня данных (работа с Entity Framework)

У меня есть классы репозитория, определенные в моем слое данных. После их установки в слое BL я получаю сообщение об ошибке, указывающее, что ссылка на сборку структуры сущности отсутствует. Я добавляю ссылку на ту же инфраструктуру dll framework, которая используется в моем DL, и она работает.

Мой вопрос: почему этого недостаточно, чтобы иметь BL-ссылку DL, почему мне все еще нужно добавить «дополнительную» ссылку на EF в BL? Я, очевидно, не хочу контролировать более одного варианта EF в своем решении.

Я бы подумал, что мой DL - это «атомная» единица, все ее объекты самодостаточны и больше ничего не нужно для правильной работы. Почему тогда, когда в классах, определяемых в DL, мне все равно нужно добавить ссылку EF, что с помощью собственной ссылки EF?

ответ

2

Это действительно то, как работает двигатель MSBuild. Visual Studio не жаловалась на косвенные ссылки, а только обнаружила на сервере сборки TFS, что она сломалась. Что касается того, почему они строят это так, как они это сделали, у меня нет ответа.

У меня есть легкое исправление: Использование solution-level NuGet packages. Вы добавляете пакет Entity Framework в решение как пакет NuGet, и вы проверяете все проекты, которые должны иметь эту ссылку. Этот способ также предотвращает несколько разных версий.

Для получения более подробного объяснения вы можете read this article.

+0

Hm ... пакеты решений nuget для решения ... кажется, что я хочу узнать что-то интересное благодаря вам;) – Veverke

+0

Хотя повел меня к решению, я бы рекомендовал прочитать следующую статью для более подробного объяснения: http : //blog.spinthemoose.com/2013/04/21/nuget-tip-3-manage-packages-at-the-solution-level/ – Veverke

+1

Приятная находка, я добавил ее к ответу для других людей. –