Генерация нескольких строк в одной таблице из одной и той же структуры объекта - PullRequest
1 голос
/ 22 июля 2011

Короче говоря, я пытаюсь взять данные XML и сохранить их в таблице. Структура, вызывающая у меня проблемы, выглядит сейчас так:

<Event>
  <PhaseOne>...</PhaseOne>
  <PhaseTwo>...</PhaseTwo>
  <PhaseThree>...</PhaseThree>
  <EventID>12345</EventID>
  <EventDate>09/09/09</EventDate>
</Event>

Конечный результат этого - 3 строки в моей таблице событий (по одной на каждый <Phase>). Каждая строка требует не только данных внутри соответствующего элемента <Phase>, но и значений родительского уровня, таких как <EventID>.

У меня есть XSD.exe сгенерированные классы для десериализации XML, но я не могу понять, как настроить первые сопоставления кода EF для получения правильных результатов.

Я думал, что просто сопоставлю каждый класс <Phase> с одной и той же таблицей, но тогда я не уверен, как сопоставить значения родительского уровня (<EventID>) со столбцами в этой строке.

К сожалению, я не могу изменить XML или схемы таблиц.

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Мое решение

Я добавил копии членов EventID и EventDate в каждый класс Phase, а затем заполнил их вручную после десериализации.

0 голосов
/ 23 июля 2011

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

  • Создать отдельные типы для персистентности и заполнить их из десериализованных типов
  • Не использовать десериализацию (или писать свою собственную) и вместо этого обрабатывать XML вручную с помощью XmlDocument, XmlReader или XElement.Заполните ваши постоянные типы напрямую из read XML
  • Не используйте EF и сохраняйте десериализованные типы с помощью хранимых процедур
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...