从同一对象结构生成同一个表中的多个行

时间:2011-07-22 16:37:30

标签: c# .net xml entity-framework ef-code-first

简而言之,我正在尝试获取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 Code First Mappings以生成正确的结果。

我认为我只是将每个<Phase>类映射到同一个表,但后来我不确定如何将父级别值(<EventID>)映射到该行中的列。

不幸的是我无法更改XML或表模式。

2 个答案:

答案 0 :(得分:0)

您显然需要将反序列化类型与持久类型分开 - 它们不能相同,因为持久化类型需要不同的结构,然后反序列化类型具有。您将无法为反序列化类型设置映射,因为EF不支持您想要的内容。您的选择是:

  • 为持久性创建单独的类型,并从反序列化类型中填充
  • 不要使用反序列化(或编写自己的反序列化),而是使用XmlDocumentXmlReaderXElement手动处理XML。直接从read XML
  • 填写持久化类型
  • 不要使用EF并使用存储过程保留反序列化类型

答案 1 :(得分:0)

我的解决方案

我将EventIDEventDate成员的副本添加到每个Phase类,然后在反序列化后手动填充它们。