entity-framework – 将带有子项的Entity Framework对象序列化为XML文件

我正在使用Entity Framework查询父/子结果集的数据,我想将此数据导出到XML文档.
var agreement = storeops.Agreements.SingleOrDefault(a => a.AgreementNumber == AgreementTextBox.Text);
XmlSerializer serializer = new XmlSerializer(agreement.GetType());
XmlWriter writer = XmlWriter.Create("Agreement.xml");
serializer.Serialize(writer,agreement);

这很有效,除了它只序列化父级而不在XML中包含相关的子记录.我怎样才能让孩子们序列化呢?

我也尝试使用POCO生成的代码,并且子集合尝试序列化,除了它们是无法序列化的ICollections.

无法序列化System.Collections.Generic.ICollection`1 [[DataSnapshots.AgreementItem,DataSnapshots,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]类型的成员DataSnapshots.Agreement.AgreementItems,因为它是一个接口.

在使用Entity Framework实体时,XML序列化的行为与二进制序列化和数据协定序列化不同.后者将序列化已加载到对象图中的任何相关对象,但XML序列化不会,因此您需要使用DataContractSerializer:
var agreement = storeops.Agreements.SingleOrDefault(a => a.AgreementNumber == AgreementTextBox.Text);
// make sure any relations are loaded

using (XmlWriter writer = XmlWriter.Create("Agreement.xml"))
{
    DataContractSerializer serializer = new DataContractSerializer(agreement.GetType());
    serializer.WriteObject(writer,agreement);
}

此外,实体框架默认使用延迟加载1:多个关系,如果在进行序列化时尚未加载引用的对象,那么您将获得的只是引用它们的键.您必须通过调用agreement.Children.Load()或在查询中使用.Include(“Children”)显式加载相关实体(其中“Children”是相关实体集合的名称).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇