【问题标题】:Detaching entity along with referenced entities与引用的实体一起分离实体
【发布时间】:2009-03-18 13:37:52
【问题描述】:

好的,我正计划使用实体框架开发一个项目。在我开始实施之前尝试做一些研发,我发现了这个问题,希望你们中的一些人帮助我找到解决方案。

我有一个名为“Person”的实体被“Members”实体引用,具有一对多 (1:N) 关系。任务是查询 Person 实体及其对应的 Members 集合,并将其传递给表示层以对其进行查看、修改或删除,然后将修改后的实体对象传递回 Model 层以将实体附加到上下文并将其保存到数据库中。

据我分离/附加 w.r.t.像“人”这样的单个实体并将其保存到数据库中,一切都很好。 但是,当我尝试使用其引用的实体(成员)查询实体(人员)并分离时,我可以将其发送到表示层。我发现我只得到了 Person 实体集合,而引用 Member 实体集合在从上下文中分离后被完全删除。

我在这里粘贴我的代码 sn-p 以供参考:

using (GOLProfessionalEntities context = new GOLProfessionalEntities())
{
     ObjectQuery<Person> query =
        context.Person.Include("Members");

     var person = query.First();
     context.Detach(person);

     return person;
}

如果有人提出解决方案,我会非常高兴。

提前致谢。 -ssak32

【问题讨论】:

  • 对不起,我的建议无济于事,这只是在黑暗中刺伤。我已将其删除以防止其混淆其他人 :o)
  • 来吧,我真的很感谢你的参与,我很感谢你。你不应该删除你的建议,也许它会帮助其他朋友了解这项技术:-)

标签: entity-framework


【解决方案1】:

您可以将 ObjectQuery 上的 MergeOption 设置为 NoTracking。这样一来,Person 就不会被附加到 ObjectContext。

            using (GOLProfessionalEntities context = new GOLProfessionalEntities())
            {
                ObjectQuery<Person> query =
                   context.Person.Include("Members");
                query.MergeOption = MergeOption.NoTracking;// <--

                var person = query.First();

                return person;
            }

我的答案这么晚了,它可能会对某人有所帮助。

【讨论】:

    【解决方案2】:

    我相信您还需要分离每个成员:

    使用 (GOLProfessionalEntities 上下文 = 新 GOLProfessionalEntities()) { ObjectQuery 查询 = context.Person.Include("成员");

     var person = query.First();
    
    
     while (person.Member.Count > 0)
     {
         context.Detach(person.Member.First());
     }
    
    
     context.Detach(person);
    
     return person;
    

    }

    我希望这有效。

    【讨论】:

    • 这行不通,因为当成员分离时和人员分离时,关系从人员中删除。
    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 2016-05-12
    • 2016-12-19
    • 1970-01-01
    • 2013-01-29
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多