从相同的对象结构在同一表中生成多行
本文关键字:对象 结构 | 更新日期: 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不支持您想要的。您的选择是:
- 为持久性创建单独的类型,并从反序列化类型填充它们
- 不要使用反序列化(或自己编写),而是用
XmlDocument
、XmlReader
或XElement
手动处理XML。直接从读取XML 填充持久化类型 - 不要使用EF,并使用存储过程来持久化你的反序列化类型
我的解决方案
我将EventID
和EventDate
成员的副本添加到每个Phase
类中,然后在反序列化后手动填充它们。