Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体对象的XML序列化_C#_Wcf_Entity Framework 4_Xml Serialization - Fatal编程技术网

C# 实体对象的XML序列化

C# 实体对象的XML序列化,c#,wcf,entity-framework-4,xml-serialization,C#,Wcf,Entity Framework 4,Xml Serialization,我正在尝试将EF4.0对象图序列化为XML并通过WCF服务传递。在过去,我使用DTO/POCO(通常用于JSON序列化)实现了这一点。在本例中,由于我只进行XML序列化,因此似乎应该能够直接序列化实体对象。然而,我遇到了以下难题: 如果我不分离实体,序列化将抛出一个错误,即对象上下文已被释放(因为它在该点上已释放,所以这是预期的) 如果拆离实体,则会删除导航属性中加载的所有相关对象 我的期望是,如果我枚举了任何链接的实体,然后将对象从上下文中分离,那么我仍然可以将该关系用于序列化 所以我的问题是

我正在尝试将EF4.0对象图序列化为XML并通过WCF服务传递。在过去,我使用DTO/POCO(通常用于JSON序列化)实现了这一点。在本例中,由于我只进行XML序列化,因此似乎应该能够直接序列化实体对象。然而,我遇到了以下难题:

  • 如果我不分离实体,序列化将抛出一个错误,即对象上下文已被释放(因为它在该点上已释放,所以这是预期的)

  • 如果拆离实体,则会删除导航属性中加载的所有相关对象

  • 我的期望是,如果我枚举了任何链接的实体,然后将对象从上下文中分离,那么我仍然可以将该关系用于序列化

    所以我的问题是,有没有直接序列化实体对象并保留任何加载的导航属性/集合


    谢谢

    序列化对象时,序列化程序将遍历整个对象图

    • 如果对象被附加,它将强制加载每个延迟加载导航。因此,如果您的上下文被释放,您将得到一个异常
    • 根据,当导航属性中的项目被分离时,它不再显示在导航属性中。我认为分离对象并访问其导航属性时也是如此

    我认为应该在序列化之前从实体对象生成DTO/POCO。不过,您应该看看哪些选项有助于将对象从实体转换为DTO再转换回实体。

    是否确实加载了导航属性?第一个问题看起来像是EF触发器延迟加载获取它们。在分离对象之前,我已经显式访问了所需的导航属性。我的期望是,如果这些值被读取(因此从数据库中加载),那么它们在对象分离后仍然可用。