2013-09-28 9 views
2

Я видел много таких вопросов здесь, но они либо остались без ответа, не то же самое, что я спрашивать или детали, которые мне нужны.Как отделить уровень POCO от уровня структуры Entity Framework и по-прежнему иметь возможность добавлять бизнес-логику к объектам

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

  1. В моем «образцовом» решении у меня есть проект под названием Sample.Data.Model, который содержит файл edmx моей первой модели базы данных.
  2. Following the steps in this MSDN walkthrough, Затем я переместил автоматически созданные классы POCO в отдельный проект и назвал его Sample.Data.Entities.
  3. Затем я ссылался на проект Sample.Data.Entities в своем проекте Sample.Data.Model и исправил все записи, чтобы мой проект успешно сработал.
  4. Конечно, мне нужно добавить классы 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

enter image description here

+1

Основная проблема заключается в том, что вы пытаетесь реализовать _active record_ в архитектуре, которая вращается вокруг _underistence ignorance_. У организаций не должно быть обязанностей CRUD. Это для контекста и 'DbSet'. Тогда у вас может быть уровень сервиса, который знает DAL (сущности контекста +) и, возможно, знает библиотеку с моделями просмотра (или содержит модели просмотра). Уровень контроллера только связывается со служебным уровнем. –

ответ

1

Итак, мой вопрос, где в моей текущей настройки я поставил "запросы" для данных?

Я думаю, вы должны использовать магический шаблон хранилища.
Например: http://www.remondo.net/repository-pattern-example-csharp/

Кроме того, если я собираюсь сделать «ViewModels» для моего проекта MVC, где должны те пойти?

Поскольку viewmodel содержит данные, которые связаны с их представлениями, я считаю, что вам не нужно сочетаться с объектами или их частичными классами.Если бы я был вами, я просто поместил в папку Model в вашем проекте MVC.

+0

спасибо за ответ !! Я рассмотрю шаблон хранилища, но я надеялся, что что-то немного порежет и высушит. Кроме того, я не сумасшедший о том, чтобы поместить мои ViewModels в проект MVC, потому что мне нравится возвращать мои запросы данных с бизнес-уровня в виде ViewModels следующим образом: http://screencast.com/t/n31t9rjU8HBR – RichC

+0

Для получения дополнительной информации, пожалуйста, проверьте это: https://github.com/Binjaaa/ServiceRegistry/blob/master/SRR.DataAccessLayer/Repositories/SRREntityTypeRepository.cs Вы можете пометить методы базового репозитория как виртуальные, таким образом вы можете изменить каждый из них в текущем хранилище. Например, UserRepository. – Binjaaa

+1

И для viewmodels: http://sampathloku.blogspot.hu/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html – Binjaaa

1

Возможно, вам будет интересно использовать открытый исходный код N-Tier Entity Framework, который использует сервер Entity Framework на стороне сервера и генерирует всю инфраструктуру для построения n-уровневой архитектуры на основе WCF, включая EF-подобный API на стороне клиента. Просмотрите руководство пользователя и примеры приложений, доступные для загрузки на codeplex. Результирующие решения являются очень настраиваемыми, а также дают указания о том, куда их можно поместить.

+0

Отличное предложение ресурсов - я посмотрю. – RichC