Я пытаюсь собрать простой POC для n-уровневого приложения, использующего EF4 на уровне данных. Я просмотрел многочисленные примеры в Интернете, и, как представляется, обычной практикой является использование DAO или репозитория в качестве оболочки для ORM. Насколько я понимаю, основное различие между ними состоит в том, что репозиторий является более общим и использует IQueryable, например, для параметров. Я хотел бы (к лучшему или к худшему) на этом этапе придерживаться более простых объектов DAO, которые будут содержать довольно специфические методы, такие как GetPersonByFirstName (имя строки), подобно тому, что было сделано ранее с вещами на основе ADO.NET. Тем не менее, мне все еще нужны несколько "сквозных" функций для моих DAO.
- Как мне делиться контекстом между DAO? Желательно, чтобы бизнес-объект, создающий экземпляр DAO, не знал об EF. Первоначально я думал, что BO будет передавать сессию DAO, но это нарушит мое требование о независимости BO от EF (если я не думаю о чем-то). Может быть, какой-то подход Singleton / Factory?
- Есть ли более элегантный способ справиться с этим для приложений ASP.NET, использующих контекст запроса? В основном, настройка типа сеанса для запроса, но без необходимости изменения какого-либо кода уровня представления.
- Полагаю, у меня может быть базовый класс DAO с очень базовыми методами CRUD, которые будут совместно использоваться всеми DAO, но опять же не до такой степени, как IQueryable.
- Я хотел бы использовать TransactionScope в моем бизнес-объекте для обертывания моего DAO (я не вижу в этом проблемы).
Спасибо!