Мы используем .net C # 4.0, VS 2010, EF 4.1 и унаследованный код в этом проекте, над которым мы работаем.
Я работаю над проектом формы win, где я принял решение начатьиспользование сущности 4.1 для доступа к MS SQL DB.База кода довольно старая, и у нас есть существующий уровень данных, который использует адаптеры данных.Эти адаптеры данных используются повсеместно (в веб-приложениях и приложениях для выигрышных форм). Я планирую со временем заменить старый код доступа к БД на EF и избавиться от тесной связи между уровнями пользовательского интерфейса и уровнем данных.
Таким образом, моя идея состоит в том, чтобы более или менее объединить EF с унаследованным уровнем доступа к данным и постепенно заменить унаследованный уровень данных более современным подходом к использованию EF.Поэтому на данный момент нам нужно использовать как EF, так и устаревший код доступа к БД.
На данный момент я добавил проект, содержащий файл edmx и контекст.EDMX генерируется с использованием базы данных первым подходом.Я также добавил еще один проект, который содержит классы POCO (с помощью ADO.NET POCO Entity Generator).Я более или менее следовал подходу Джулии Лерман в ее книге «Программирование Entity Framework» о том, как разделить модель и сгенерированные классы POCO.Модель базы данных была установлена в течение многих лет, и это не вариант, чтобы изменить таблицу и отношения, триггеры, хранимые процедуры и т. Д., Поэтому я в основном застрял с моделью db, как она есть.
Я читал о шаблоне репозитория и единице работы, и мне нравятся шаблоны, но я изо всех сил пытаюсь реализовать их, когда у меня есть и EF, и устаревший код доступа к db.Особенно, когда у меня нет времени, чтобы заменить весь устаревший код доступа к БД чистой реализацией EF.В идеальном мире я бы начал все сначала со свежей модели данных, но здесь это не вариант.
Являются ли шаблоны репозитория и единицы работы подходящими?Чтобы использовать классы POCO на моем бизнес-уровне, мне иногда нужно использовать как EF, так и унаследованный код БД для заполнения моих классов POCO.Другими словами, я иногда могу использовать EF для извлечения части данных, которые мне нужны, и использовать старый уровень доступа к БД для извлечения остальных данных, а затем сопоставить данные с моими классами POCO.Когда я хочу обновить некоторые данные, мне нужно выбрать данные из классов POCO и использовать устаревший код доступа к данным для хранения данных в базе данных.Поэтому мне нужно отобразить данные, полученные из унаследованного слоя доступа к данным, в мои классы POCO, когда я хочу отобразить данные в пользовательском интерфейсе, и наоборот, когда я хочу сохранить данные в базе данных.
Чтобы усложнитьвещи, в которых мы храним некоторые данные в таблицах, имя которых мы не знаем до выполнения (пожалуйста, не спрашивайте меня, почему :-)).Поэтому на старом уровне доступа к БД нам пришлось создавать операторы SQL на лету, куда мы вставляли имена таблиц и столбцов на основе информации из других таблиц.
Я также обнаружил, что отношения между классами POCO несколькослишком база данных ориентирована.Другими словами, я чувствую, что мне нужна более упрощенная модель предметной области для работы.Возможно, мне следует создать модель предметной области, которая отвечает всем требованиям, а затем использовать классы POCO в качестве «DAO» для заполнения классов модели предметной области?
Как бы вы реализовали это, используя шаблон репозитория и шаблон единицы работы?(если это путь)