Многоуровневое приложение ASP.Net - модель данных общего доступа между слоями - PullRequest
3 голосов
/ 17 мая 2010

Как я могу поделиться автоматически сгенерированной моделью данных сущностей (сгенерированными классами объектов) среди всех уровней моего веб-приложения C #, в то время как только предоставление доступа к данным на уровне данных? При этом используется типичный трехуровневый подход: данные, бизнес, презентация.

Мой уровень данных возвращает IEnumerable<T> на мой бизнес-уровень, но я не могу вернуть тип T на уровень представления, потому что я не хочу, чтобы уровень представления знал о существовании уровня данных - где находится структура сущностей автоматически сгенерированные мои классы.

Было рекомендовано иметь отдельный слой только с моделью данных, но я не уверен, как отделить модель данных от функциональности запросов, которую предоставляет структура сущностей.

Ответы [ 2 ]

5 голосов
/ 17 мая 2010

Если вы используете POCO-сущности (.NET 4+), то это легко (или, по крайней мере, проще). Это возможно?

Вы можете создавать DTOs, как сказал Бен, но тогда вы, по сути, теряете значение и дублируете каждую из сущностей. EF2 создаст «тупые» объекты и динамически добавит отслеживание изменений, отложенную загрузку и т. Д., Если хотите.

В противном случае ответ - ты не можешь. Если сущности зависят от Entity Framework, вы не сможете использовать их во всем приложении, не перетаскивая эту зависимость. В этом случае вы должны использовать DTO. Вот сторонний вариант для EF 1 или EF 2 без объектов POCO. http://automapper.codeplex.com/

Редактировать: Вот несколько полезных ссылок, чтобы узнать больше обо всем этом:

  1. Общие указания по MS: http://msdn.microsoft.com/en-us/library/bb738470.aspx
  2. Шаблоны POCO: http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx
  3. Шаблоны POCO, , включая инструкции перейти к отдельному проекту : http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-poco-templates-for-the-entity-framework.aspx
  4. POCO прокси: http://blogs.msdn.com/adonet/archive/2009/12/22/poco-proxies-part-1.aspx
  5. Как разбить модель: http://blogs.msdn.com/adonet/archive/2008/11/25/working-with-large-models-in-entity-framework-part-2.aspx
  6. Пример приложения Employee Tracker (слои, юнит-тесты, издевательства, хранилище и т. д.): http://code.msdn.microsoft.com/ef4/Release/ProjectReleases.aspx?ReleaseId=4279
2 голосов
/ 17 мая 2010

Вы можете создать DTO из ваших объектов данных и передать ваши DTO на уровень представления.

...