12

Позволяет рассматривать по умолчанию ASP.NET MVC структуру папок приложения, так что это выглядит следующим образом:Где разместить модель данных Entity Framework в приложении MVC?

-App_data 
-Content 
-Controllers 
    HomeController.cs 
-Models 
    AccountModels.cs 
-Scripts 
-Views 

Мой вопрос: Где лучшее место, чтобы поместить Entity Framework модель данных (EDMX) файл? Это папка «Модели»? Да, мы знаем, что хорошим решением является внедрение нового проекта и обращение к нему с помощью MVC-приложения, но сейчас забываем об этом.

+1

** ПОЧЕМУ ** Вы хотите исключить правильное решение перед тем, как положить все это в отдельную сборку? Это лучший и самый чистый подход - ** использовать его! ** –

ответ

17

Для небольшого проекта он должен быть частью Модели. Для более крупного продукта репозиторий и связанная с ним модель могут быть в отдельной сборке.

6

Ну это спорно, но я бы голосовать +1 за Модели папки.

Единственным кандидатом будет App_Data, но это, как правило, для файловых баз данных (например, SQL Server CE .MDF) и файлов, которые вы не хотите обслуживать IIS.

Как EDMX является абстракции базы данных, он должен идти в модели папки.

Если проект становится больше, вы должны определенно переместить свою модель EF в другой проект. Чтобы убедиться в этом, сделайте свои контроллеры доступными к EDMX через репозиторий/интерфейсы, поэтому, когда вы переместите DAL на другой проект, вам нужно будет добавить ссылку и добавить в операторы using.

0

Мое мнение таково, что вы должны создать

  1. отдельного проекта для объектов домена, datacontracts и т.д. и т.п. ... Как MyProject.Infrastructure в том числе многих папок, как DataContracts, модель, исключение и т.д.
  2. отдельный проект для DATAACCESS Wich содержит DBContexts и Хранилища, таким образом, вы можете легко управлять миграции позже
+0

Действительно ли нужны два отдельных проекта? Почему бы не добавить классы домена и классы доступа к данным в одном проекте. Если у вас будет много разных хранилищ данных, возможно, некоторые нереляционные, тогда отдельные проекты для классов домена и доступа к данным имеют смысл. –

1

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

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

Поскольку хранить это в своей собственной сборке так просто и занимает несколько минут, я настоятельно рекомендую сделать это для каждое крошечное приложение тоже.

Смежные вопросы