Чистая структура решения (проекта) с EF, хранилищами, сущностями - PullRequest
8 голосов
/ 12 марта 2011

Мне нравится сохранять структуру проекта как можно более чистой. Пример:

--BlogApp.sln
  --BlogApp.Data
      BlogModel.edmx (the EF mappings)
      Post.cs (I end up having partial classes in here with attributes)
  --BlogApp.Domain
    --Entities
        Post.cs (I would like to have my POCOs here with all its additional logic)
    --Repositories
        PostsRepository.cs
  --BlogApp.Ui
      (standard MVC structure)

Я получаю беспорядок при использовании EF в качестве ORM. Кто-нибудь может предложить какой-нибудь «чистый» способ структурирования проекта? Или, может быть, вы могли бы предложить какую-то стандартную структуру проекта, которая наиболее часто используется.

Ответы [ 2 ]

19 голосов
/ 12 марта 2011

Моя предпочтительная структура:

Solution
  -- Common
       - Shared features used accross all layers
       - You can also place interfaces for repositories and uow here
  -- Entities - shared among DataAccess, Business (and UI in small projects)
       - T4 template + partial classes + custom enums  
       - partial classes can contain methods with domain logic => domain objects 
  -- DataAccess - all EF dependent code here
       - EDMX or code first mapping
       - Repositories
       - UnitOfWork
  -- Business - not every project needs this assembly
       - Business services 
       - Logic like workflows
       - DTOs exposed to UI
  -- UI
       - Controllers
       - Views
       - ViewModels
2 голосов
/ 12 марта 2011

Проверьте эту запись на Шаблонах T4 и Entity Framework . Вы можете написать в пользовательских атрибутах для свойств объекта, сгенерированных через EF. Я делал это несколько раз, и после выяснения, как это сделать, теперь это экономит много времени. Как вы уже упоминали, я пытался использовать частичные классы, но мой сгенерированный EF класс перезаписывает другой с помощью пользовательских атрибутов. Возможно, я делал что-то не так, но в любом случае я сейчас предпочитаю шаблонное решение T4, потому что оно мне кажется чище - минимизация количества классов в проекте.

Кроме того, когда вы обновляете свою модель EF из БД и класс восстанавливается, ваши пользовательские атрибуты остаются на месте. FTW!

ДОБАВЛЕНО : Кстати, мы обычно определяем наши объекты модели на уровне данных, чтобы они отображались / заполнялись сущностями EF. Или (еще проще) использовать объекты, сгенерированные EF, вплоть до уровня пользовательского интерфейса без пользовательских POCO.

...