Подтвердить что ты не робот

ASP.NET и Entity Framework в многоуровневой архитектуре - только с использованием Entity Framework для ORM

У меня есть приложение ASP.NET, которое использует многоуровневую архитектуру, например. уровень представления, уровень бизнес-логики, уровень доступа к данным.

Я не хочу, чтобы бизнес-уровень должен был знать что-либо о том, как реализован уровень доступа к данным, и я не хочу привязывать Entity непосредственно к элементу управления данными, используя EntityDataSource или что-то в этом роде. (так что сценарий паттерна репозитория)

Я ТОЛЬКО ИЩУ ИСПОЛЬЗОВАТЬ РАМОЧНУЮ СТРУКТУЮ, КАК ОРМОВОЙ ИНСТРУМЕНТ ДЛЯ ГЕНЕРИРОВАННЫХ КЛАССОВ. Я знаю, как это сделать. Что я не понимаю, это

  • Целесообразно ли распространять эти классы через приложение, чтобы уровень бизнес-логики имел дело с частичными классами, созданными непосредственно инфраструктурой сущности? (например, если у меня есть таблица клиентов в sql, объект fw создал класс клиента, который потенциально может быть использован непосредственно во всех слоях моего приложения).
  • Как управлять поддержкой транзакций, если мой BLL вызывает несколько разных классов сущностей, но хочет рассматривать его как одну транзакцию.
4b9b3361

Ответ 1

  • Если вы практичны: да! Это позволит избежать двойной работы по отображению и потенциальных ошибок, вызванных двойным отображением. (По двойному отображению я имею в виду DB → ORM и ORM → Бизнес-логика).
  • Используйте TransactionScope. Это лучший способ совершить транзакцию, не беспокоясь о вложенных транзакциях.

Ответ 3

Другой способ сделать это - использовать классы сопоставления, использовать то, что EF чисто как доступ к данным, и использовать классы EF, сгенерированные только внутри DAL, а затем сопоставить эти объекты DAL с вашими объектами BLL через картографы. Это отлично работает для нас.

Ответ 4

Теперь с новым EF4 вы также можете использовать классы POCO, тем самым устраняя дополнительную нагрузку на отображение объектов между слоями. В нашем приложении мы использовали EF4 и использовали бизнес-объекты в приложении, кроме представления, которое требовало viewmodel. Это дало значительный прирост производительности.

Ответ 5

Не с инфраструктурой сущностей, но я попытался создать образец с двумя хранимыми процедурами вставки, которые выполняются отдельно на уровне доступа к данным (с использованием блока приложений доступа к данным 3.1), завернутый в контекст TransactionScope в Service/BLL, он не Работа. Одна вставка прошла, другая отказалась, и данные WAS были совершены.

У вас были какие-то успехи в этом?

Ответ 6

Даже если вы используете сгенерированные классы POCO, как предлагают другие операционные системы, вам все равно придется поддерживать определенную зависимость от структуры сущности: запросы, которые вы отправляете в свой DbContext/ObjectContext. Поэтому вам следует рассмотреть вопрос о инкапсуляции запросов в репозитории.