MVC3 и Entity Framework
Мой вопрос довольно прост: это хорошая практика для размещения .edmx
файл в папке модели в веб-приложении проекта MVC3?
3 ответа
Мой ответ довольно прост: не путайте презентационный уровень (Whole MVC-приложение) с логикой доступа к данным и моделированием данных.
В решении Visual Studio должно быть как минимум 4 проекта снизу вверх:
1 - ProjectName.Interfaces (библиотека классов, интерфейсы сущностей);
2 - ProjectName.DAL (библиотека классов, единственная, которой разрешено даже знать, что используется EF, сущности POCO реализуют интерфейсы проекта 1, используя другой файл, в котором вы повторно определяете те же объекты, используя частичные классы...);
3 - ProjectName.BL (Библиотека классов, Бизнес-логика, ссылается на два проекта выше 1 и 2);
4 - ProjectName.Web (приложение ASP.NET MVC, Уровень представления, ссылается на два проекта 1 и 3, но НЕ 2);
это, конечно, для упрощения, исходя из моего опыта, это солидный дизайн, немного излишний для очень маленьких проектов, но окупающийся в долгосрочной перспективе.
На мой взгляд, M из MVC, Model, это НЕ модель данных, не EF, не существует ORM, привязанного к конкретному ядру базы данных.
этот ответ, конечно, субъективен и основан на моем личном опыте;-)
Здесь я полностью согласен с Давиде. Я просто хочу добавить, что вам также следует рассмотреть возможность использования шаблонов POCO для генерации объектов poco, а не для возврата объектов каркаса сущности на другой уровень, потому что тогда это ставит зависимость от каркаса сущности.
В какой-то неизбежный момент, если вы не включите это в отдельный проект, ваш код прямого доступа к данным в итоге будет добавлен в ваш веб-код. Я вижу это все время (и все мы когда-то были виноваты в этом)
Я не думаю, что это имеет большое значение.
Я использую CodeFirst, поэтому мой класс DbContext идет в папку Model.
Действительно, EDMX предназначен только для генерации кода, кроме того, что он мало что делает, он не развернут / не опубликован на вашем сервере и т. Д. Поэтому, где он остается, не важно. Вы можете создать другую папку для нее EDMX, если хотите, или поместить ее в модель, как вы просили.