Проблема создания пользовательского объекта из столбца/строки XML с использованием репозитория Entity Framework для POCO

Я использую Entity Framework 4.0 в шаблоне репозитория для заполнения моих объектов POCO, которые находятся в другой сборке. Один из моих объектов содержит столбец XML из базы данных (строковый тип в классе).

К сожалению, эта строка XML содержит идентификаторы первичных ключей, которые мне ТОГДА нужно использовать для извлечения других объектов (с репозиторием) для создания другого пользовательского объекта. Я пытался сделать это, используя настраиваемый метод доступа get для объекта домена, который пытается проанализировать XML, а затем перейти из репозитория. Проблема в том, что это приводит к тому, что моя модель требует репозиторий и дает мне круговую зависимость.

Есть ли хороший способ сделать что-то подобное? Возможно, какой-то пользовательский код для анализа столбца XML в слое репозитория EF и сопоставления того, что мне нужно, с настраиваемым объектом в моей модели?

Любые ответы очень ценятся, спасибо!


person Hector    schedule 05.05.2011    source источник


Ответы (1)


Нет способа сообщить EF, что столбец XML на самом деле является другим типом сущности. Как только вы переместите логику в метод доступа get, вы действительно нарушите зависимость создания модели от постоянства, которую вы пытаетесь удалить с помощью POCO. Это сломает ваш дизайн, основанный на домене.

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

  • загружать основной объект, анализировать XML и загружать отношения в одном и том же методе репозитория
  • или загружать основной объект одним методом и анализировать XML и загружать отношения другим методом

Если основной объект не является совокупным корнем для отношений (они могут существовать отдельно), вы должны создать отдельный репозиторий для связанных объектов и выставить метод только для загрузки объектов, определенных строкой XML.

person Ladislav Mrnka    schedule 05.05.2011