Я видел много таких вопросов здесь, но они либо остались без ответа, не то же самое, что я спрашивать или детали, которые мне нужны.Как отделить уровень POCO от уровня структуры Entity Framework и по-прежнему иметь возможность добавлять бизнес-логику к объектам
Я включил скриншот моего проекта ниже для высокоуровневого справочного обзора вещей.
- В моем «образцовом» решении у меня есть проект под названием
Sample.Data.Model
, который содержит файл edmx моей первой модели базы данных. - Following the steps in this MSDN walkthrough, Затем я переместил автоматически созданные классы POCO в отдельный проект и назвал его
Sample.Data.Entities
. - Затем я ссылался на проект
Sample.Data.Entities
в своем проектеSample.Data.Model
и исправил все записи, чтобы мой проект успешно сработал. - Конечно, мне нужно добавить классы POCO, поэтому я добавил папку
PartialClasses
в проектSample.Data.Entities
для своих частичных классов.
И вот тогда я заблудился. В небольших (не многоуровневых проектов) мой файл EDMX и частичных классов, где в том же проекте, так что я мог бы просто добавить мой класс объекта, связанные методы в моих частичных файлов класса, как это:
namespace Sample.Data.Entities
{
public partial class User
{
public string FullName
{
get
{
return string.Format("{0} {1}", this.FirstName, this.LastName);
}
}
}
public User GetUser(int userID)
{
using (var dc = new ProntoEntities())
{
return (from u in dc.Users where u.ID == userID select u).SingleOrDefault();
}
}
}
И тогда в проекте MVC Я мог бы просто сделать что-то вроде этого ...
User user = new User();
user = user.GetUser(1);
ИЛИ
User user = new User();
user.FirstName = "John";
user.LastName = "Smith";
user.Update();
Однако, я не могу сделать в этой текущей настройки, так как частичные классы ничего не знают о Entities.
Итак, мой вопрос: где в моей текущей настройке я помещаю «запросы» для данных?
Кроме того, если я собираюсь сделать «ViewModels» для моего проекта MVC, куда они должны пойти? Обычно я помещал их в тот же проект, что и мои частичные классы и файл edmx.
Click to view larger version of image below
Основная проблема заключается в том, что вы пытаетесь реализовать _active record_ в архитектуре, которая вращается вокруг _underistence ignorance_. У организаций не должно быть обязанностей CRUD. Это для контекста и 'DbSet'. Тогда у вас может быть уровень сервиса, который знает DAL (сущности контекста +) и, возможно, знает библиотеку с моделями просмотра (или содержит модели просмотра). Уровень контроллера только связывается со служебным уровнем. –