EF CodeFirst: сопоставление сущностей (один-много) одной и той же таблице - PullRequest
1 голос
/ 20 мая 2011

Допустим, у меня есть классы Customer, Order, OrderDetail на бизнес-уровне (это упрощенная версия моей проблемы).

У меня также есть old (существующая) база данных , в которой есть одна глобальная таблица, в которой каждая строка таблицы содержит информацию о Customers-Orders-OrderDetails;например:

CustomerID, CompanyName, Fax, OrderID, OrderDate, ProductID, UnitPrice, количество

(таким образом, в разных строках дублируется информация о клиенте).

В будущем у меня будет новая база данных (с другой таблицей Customers, Orders, OrderDetails), и я хочу использовать ту же программу.

Я хочу использовать EF CodeFirst для сопоставления со старой базой данных и в будущем с новой базой данных

Какое решение является наилучшим?

  1. Разработка бизнес-уровня с глобальный класс , содержащий информацию о Customers-Orders-OrderDetails.Поэтому сопоставление этого класса со старой базой данных с использованием EF4 на уровне данных является тривиальным.В будущем я изменю как бизнес-уровень, так и уровень данных для новой базы данных.

  2. Разработка бизнес-уровня с классами Customers, Orders, OrderDetails.В этом случае возможно ли сопоставить эти классы с глобальной таблицей старой базы данных?Как ?(проблема в том, что Заказ-Заказчик один-ко-многим).В будущем я изменю только слой данных для отображения новой базы данных.

1 Ответ

0 голосов
/ 20 мая 2011
  1. Пока это будет работать, и позже вам придется изменить все, что работает с глобальным классом - это может быть много работы.
  2. Невозможно отобразить одну таблицу на три объекта, где два имеют отношение один-ко-многим между ними с EF.

Используйте третий подход. Загрузите один класс, как описано в первом подходе, но немедленно преобразуйте результат в три класса из второго подхода. Обратная операция будет выполнена в случае сохранения изменений. Оберните этот код в одном месте - хранилище. Ваше приложение будет использовать три класса, и оно не будет иметь никаких знаний о том, как они сохраняются. После того, как вы измените базу данных, вы удалите только дополнительные преобразования из хранилища и будете работать непосредственно с клиентом, заказом, заказом заказа, загруженным и сохраненным EF.

...