Entity framework 4 Poco父子关系丢失客户端

Entity framework 4 Poco父子关系丢失客户端,entity-framework-4,poco,parent-child,relationship,Entity Framework 4,Poco,Parent Child,Relationship,我有这样一个场景: STRUCTURE : Entity A ChildEntity B Assume this is data in my database A1 (childs) B1 B2 B3 A2 (childs) B4 B5 B6 使用linq到SQL。我想要一个B项目列表 参考家长(a项目) 服务器端在我的web服务将数据发送回客户端之前,一切正常 我有一个这样的结构: B1 A1 (childs)

我有这样一个场景:

STRUCTURE : 
Entity A
 ChildEntity B

Assume this is data in my database 

A1
    (childs)
   B1
   B2
   B3
A2
    (childs)
   B4
   B5
   B6
使用linq到SQL。我想要一个
B
项目列表 参考家长(
a
项目)

服务器端在我的web服务将数据发送回客户端之前,一切正常

我有一个这样的结构:

B1
  A1
    (childs)
    B1
    B2
    B3
B2
  A1 (parent)
    (childs)
    B1
    B2
    B3
...
...
如果我尝试浏览图表,所有项目似乎都在正确的位置

客户端,在服务器序列化和客户端反序列化之后,我遇到以下情况:

B1
  A1 (parent)
    (childs)    
    B1
    B2
    B3
B2
  NULL
B3
  NULL
B4
  A2 (parent)
    (childs)
    B4
    B5
    B6
B5
  NULL
B6
  NULL
A
项的子项中只有一个保留对父项的引用。我试图查看客户端和服务器端生成的XML,但没有发现问题

有人能帮我理解为什么会发生这种情况吗?
或者你有什么建议

注意:
如果我尝试将列表服务器端压缩为
byte[]
,并将其解压缩回客户端,将压缩对象强制转换为
list
,则所有项目都保持正确的关系,也就是客户端,一切正常。所以我想这是序列化/反序列化中的一个问题

我正在使用:

  • 标准序列化(DataContractSerializer)
  • 标准microsoft POCO模板
  • EF4

我找到了问题所在: 序列化属性时,XMLSerializer将属性以随机顺序放入XML中(可能它遵循从Datamodel edmx获得的某种顺序,我没有对此进行研究) 因此,我在XMLSerializer生成的XML中得到了这个场景:

<b:CHILD_Entity **z:Id="i1"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
    <b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
    <b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
    <b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
    <b:EndTime>2011-11-29T10:31:58.507</b:EndTime>
    <b:Quantity>0</b:Quantity>
    <b:PARENT_Entity z:Id="i2">
        <b:Description i:nil="true"></b:Description>
        <b:UtilizationType>COMMITTED</b:UtilizationType>
        <b:Reason>SETUP</b:Reason>
        <b:ReasonInfo></b:ReasonInfo>
        <b:CHILD_Entities>
            <b:**CHILD_Entity** **z:Ref="i1"**></b:CHILD_Entity>
            <b:**CHILD_Entity** **z:Id="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
                <b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
                <b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
                <b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
                **<b:ProductionCapabilityUtilization z:Ref="i2"></b:ProductionCapabilityUtilization>**
                ***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
                ..........
            </b:CHILD_Entity>
            ..................

        </b:CHILD_Entities>
        **<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>**
    </b:PARENT_Entity>
    ***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
    <b:PROP1>MLM</b:PROP1>
    <b:PROP2>MLM1</b:PROP2>
    <b:Reason>RUN</b:Reason>
</b:CHILD_Entity>
<b:**CHILD_Entity** **z:Ref="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"></b:CHILD_Entity>
我试图尽可能清楚,但情况并非微不足道,因此,如果有人需要澄清,请毫不犹豫地询问,我会尽快回答

希望这篇文章能帮助其他人:)

问候,,
路易吉·马丁内斯·比安奇

我找到了问题所在: 序列化属性时,XMLSerializer将属性以随机顺序放入XML中(可能它遵循从Datamodel edmx获得的某种顺序,我没有对此进行研究) 因此,我在XMLSerializer生成的XML中得到了这个场景:

<b:CHILD_Entity **z:Id="i1"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
    <b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
    <b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
    <b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
    <b:EndTime>2011-11-29T10:31:58.507</b:EndTime>
    <b:Quantity>0</b:Quantity>
    <b:PARENT_Entity z:Id="i2">
        <b:Description i:nil="true"></b:Description>
        <b:UtilizationType>COMMITTED</b:UtilizationType>
        <b:Reason>SETUP</b:Reason>
        <b:ReasonInfo></b:ReasonInfo>
        <b:CHILD_Entities>
            <b:**CHILD_Entity** **z:Ref="i1"**></b:CHILD_Entity>
            <b:**CHILD_Entity** **z:Id="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
                <b:CHILD_ID>008acd9a-2074-46b0-b73b-90b8c9123f6f</b:CHILD_ID>
                <b:ReasonInfo>HRC->PLC 11</b:ReasonInfo>
                <b:StartTime>2011-11-29T09:22:36.553</b:StartTime>
                **<b:ProductionCapabilityUtilization z:Ref="i2"></b:ProductionCapabilityUtilization>**
                ***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
                ..........
            </b:CHILD_Entity>
            ..................

        </b:CHILD_Entities>
        **<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>**
    </b:PARENT_Entity>
    ***<b:PARENT_ID>32864280-fe68-4b21-8375-b57ae8bbd7e6</b:PARENT_ID>***
    <b:PROP1>MLM</b:PROP1>
    <b:PROP2>MLM1</b:PROP2>
    <b:Reason>RUN</b:Reason>
</b:CHILD_Entity>
<b:**CHILD_Entity** **z:Ref="i3"** xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"></b:CHILD_Entity>
我试图尽可能清楚,但情况并非微不足道,因此,如果有人需要澄清,请毫不犹豫地询问,我会尽快回答

希望这篇文章能帮助其他人:)

问候,,
路易吉·马丁内斯·比安奇

伟大的解决方案。。。大约一年前,我就面临着这个问题和同样的原因,但当时无法找到你提到的解决方案。我只是更改了poco模板以检查父对象的主键,如果它为null,则阻止更改影响外键属性。您的解决方案非常优雅,我将在代码中使用它。请把你自己的帖子标记为答案,这样别人就会知道这是正确的答案。很好的解决方案。。。大约一年前,我就面临着这个问题和同样的原因,但当时无法找到你提到的解决方案。我只是更改了poco模板以检查父对象的主键,如果它为null,则阻止更改影响外键属性。您的解决方案非常优雅,我将在代码中使用它。请把你自己的帖子标记为答案,这样别人就会知道这是正确的答案。