Automapper для использования с Entity Framework с использованием шаблона хранилища? - PullRequest
6 голосов
/ 20 мая 2009

Я был занят созданием нового приложения, в основном у меня есть доступ к данным, уровень обслуживания и уровень представления ... Все отлично работает, но я использую классы сущностей, которые возвращаются EF. Проблема в том, что я передаю их на уровень представления, поэтому мне нужно добавить ссылку / доступ к базе данных сущности на уровень представления - НЕ ХОРОШО:

Итак, моя идея заключалась в следующем и я искал помощи и подтверждения, что я иду по правильному пути ...

  1. Создайте набор классов на уровне обслуживания, например, клиент, заказ и т. Д., Поскольку уровень представления имеет ссылку на уровень обслуживания.

  2. Когда сущность клиента возвращается в доступе к данным, я возвращаю класс сущности, т. Е. Клиента, в службу, и я делаю сопоставление здесь - Не слишком уверен, нравится ли мне это?

  3. где будут лучшие места для этих "стандартных классов", которые я использую для отображения, если я помещу их в уровень обслуживания и выполню отображение доступа к данным, то это создаст циклическую ссылку как служба Dataccess> и сервис> dataaccess .. - это должен быть только один путь, т.е. сервис> dataaccess

Я думал об использовании Automapper (http://www.codeplex.com/AutoMapper), чтобы позаботиться об этом, я на правильном пути? Любые идеи или примеры действительно ценятся ..

Как я уже сказал, единственное, что, когда я возвращаюсь из dataaccess на уровень сервиса (используя Iqueryable), мне нужно отобразить их вдали от классов сущностей и использовать стандартные классы коллекции.

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

Ответы [ 2 ]

3 голосов
/ 24 мая 2009

Вы попали в одно из слабых мест EF v1. На данный момент, да, использование маршрута с AutoMapper, безусловно, позволяет вам преобразовывать ваши EF-сущности в «прямые» бизнес-сущности и использовать их на верхнем уровне.

Кроме того, EF v4, который должен появиться в .NET 4.0 / Visual Studio 2010, должен принести много облегчения во многих проблемных областях - поддержку ваших собственных прямых POCO (Plain Old CLR Objects) и еще много других , Ознакомьтесь с EF Design Blog . В последнее время команда опубликовала ряд очень интересных, очень многообещающих постов, касающихся EF v4. Я с нетерпением жду этого!

Марк

0 голосов
/ 12 декабря 2009
  1. Вы можете использовать объекты EF в веб-проекте, если вы извлекаете их интерфейсы в основной / общий проект и возвращаете типы интерфейсов из репозитория или служб, которые использует веб-проект. Вы можете заставить объекты EF реализовывать ваши интерфейсы, создав частичные классы и добавив прямо здесь:

    частичный класс Заказчик: ICustomer

  2. Несмотря на то, что вы можете сделать 1. трюк, вам, вероятно, все равно следует использовать automapper для сопоставления этих объектов с вашими объектами ViewModel, которые соответствуют вашему конкретному виду. Вы также можете сделать так, чтобы методы запросов к репозиторию / сервисам возвращали DTO / ViewModels напрямую - это иногда позволяет делать запросы более эффективными (запрашивая только необходимые столбцы и т. Д.), Но это потребует дополнительных сопоставлений EF.

...