将实体与引用的实体分离

时间:2009-03-18 13:37:53

标签: entity-framework

好的,我打算使用Entity Framework开发一个项目。虽然我在开始实施之前尝试做一些R& D,但我发现了这个问题,希望你们中的一些人帮我找到解决方案。

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

据我分离/附上w.r.t.像'Person'这样的单个实体并将其保存到DB中,每件事都可以正常工作。 但是,当我尝试使用其引用的实体(成员)查询实体(Person)并分离以便我可以将其发送到表示层。我发现只有Person实体集合,并且从上下文中删除引用的成员实体集合后才会完全删除。

我在这里粘贴我的代码片段以供参考:

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

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

     return person;
}

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

提前致谢。 -ssak32

2 个答案:

答案 0 :(得分:2)

您可以将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;
            }

我这么晚才得到答案,这可能有助于某人。

答案 1 :(得分:0)

我认为你还需要分离每个成员:

使用(GOLProfessionalEntities context = new GOLProfessionalEntities()) {      ObjectQuery query =         context.Person.Include( “成员”);

 var person = query.First();


 while (person.Member.Count > 0)
 {
     context.Detach(person.Member.First());
 }


 context.Detach(person);

 return person;

}

我希望有效。