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

本文关键字:对象 结构 | 更新日期: 2023-09-27 18:03:16

简而言之,我试图获取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或表模式。

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

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

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

我的解决方案

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