где я должен поместить объект EF и аннотации данных в проекте asp.net mvc + entity framework

Итак, у меня есть класс DataEntity, сгенерированный EntityFramework4 для моей базы данных sqlexpress08. Этот контекст данных предоставляется через службу данных WCF/Odata клиентам Silverlight и Win Forms.

Должны ли объекты данных + файл edmx (созданный EF4) находиться в отдельной библиотеке классов?

Проблема здесь в том, что я бы указал аннотации данных для нескольких сущностей, а затем для некоторых из них потребуются определенные атрибуты MVC (например, CompareAttribute), поэтому библиотека классов также будет ссылаться на mvc dll. Также бывают пользователи сущностей, которые будут инкапсулированы или обернуты в IIdentity на веб-сайте. Так что это довольно привязано к веб-сайту mvc. Или это может быть в папке Base в самом проекте mvc?

В основном веб-сайт представляет собой данные, управляемые базой данных, такие как утверждение пользователей, изменение глобальных настроек и т. д. Реальный бизнес происходит в приложениях Silverlight и Win Forms.

Я использую mvc3 rc2 с Razor.
Спасибо.




Ответы (1)


Должны ли объекты данных + файл edmx (сгенерированный EF4) находиться в отдельной библиотеке классов?

ИМХО вся логика доступа к данным, специфичная для какой-либо технологии доступа к данным (в вашем случае Entity Framework), должна быть вынесена в отдельную сборку. Там не должно быть ссылок на конкретные сборки MVC.

В вашем приложении ASP.NET MVC вы должны ссылаться на эту сборку и писать модели представлений. Именно эти модели представления будут содержать любые атрибуты, характерные для MVC. Затем вы можете сопоставить свои классы моделей и те модели представлений, которые будут переданы в представление. Для облегчения этой задачи можно использовать AutoMapper.

person Darin Dimitrov    schedule 21.12.2010
comment
Хм, я слышал об этом раньше. Еще один вопрос, поэтому в моем проекте Mvc у меня было бы что-то вроде IRepository .. его реализация запрашивала бы объекты сущностей, а затем возвращала бы ViewModels ?? - person gideon; 21.12.2010
comment
@giddy, IRepository не должен возвращать модели представлений. Он должен работать с моделями предметной области. Сопоставление между этими моделями предметной области и моделями представлений должно выполняться контроллером. Что касается его местоположения, то, ИМХО, он лучше подходит для вашего уровня доступа к данным, а не для вашего приложения MVC. - person Darin Dimitrov; 21.12.2010