Отсоединение приложения ASP.NET MVC от Entity Framework - PullRequest
4 голосов
/ 04 июня 2011

Если у меня есть такая структура проекта

  • Foo.Data
    • ссылка EntityFramework
  • Foo.Business
    • ссылка Foo.Data
  • Foo.Web
    • ссылка Foo.Business

Разве это не должно позволять мне запретить добавление ссылки на EntityFramework из Foo.Web?

Как мне позвонить System.Data.Entity.Database.SetInitializer() с моего global.asax.cs без добавления ссылки на EntityFramework?

Ответы [ 3 ]

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

Зачем вы хотите?

Причина, по которой вы делаете это разобщение, состоит в том (я полагаю), что вы можете переключить уровень данных на более позднем этапе без необходимости что-либо изменять в веб-проекте и как можно меньше в бизнес-проекте. Для этого вам следует убедиться, что все ваши классы работают против интерфейсов , а не против конкретных реализаций.

В вашем примере вы, вероятно, должны определить некоторый интерфейс Repository, который включает метод Initialize(). Затем вы создаете класс (возможно, ваш специализированный DbContext), реализующий интерфейс, и вы работаете против этого. В методе Initialize() в вашем хранилище вы вызываете Database.SetInitializer(), и, таким образом, вам никогда не придется ссылаться на System.Data.Entity ни в Интернете, ни в бизнес-проектах.

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

Что вы можете сделать, это создать функцию InitializeDatabase() в вашем проекте Foo.Business, которая, в свою очередь, вызывает System.Data.Entity.Database.SetInitializer().Затем вы можете позвонить InitializeDatabase() из вашего Foo.Web проекта, который уже имеет ссылку на Foo.Business

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

Неа. Если Foo.Web нужны классы в EntityFramework, он должен будет ссылаться на него. Ссылки не касаются между проектами.

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