Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/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
Entity framework 实体框架分离实体和相关实体_Entity Framework_Objectcontext_Detach - Fatal编程技术网

Entity framework 实体框架分离实体和相关实体

Entity framework 实体框架分离实体和相关实体,entity-framework,objectcontext,detach,Entity Framework,Objectcontext,Detach,当我使用实体框架时,我想在一个上下文中查询出一条记录,并将其添加到另一个具有相同模式的上下文中,在查询出该记录后,我将其从上下文中分离出来,但是相关的实体都离开了,有什么办法解决它吗 提前谢谢 您是否询问如何加载子实体?如果是这样,您可以使用.Include方法进行快速加载。给定Person类和PhoneNumber类,其中Person具有PhoneNumber集合,您可以执行以下操作: List<Person> People = db.People.Where(p => p.

当我使用实体框架时,我想在一个上下文中查询出一条记录,并将其添加到另一个具有相同模式的上下文中,在查询出该记录后,我将其从上下文中分离出来,但是相关的实体都离开了,有什么办法解决它吗


提前谢谢

您是否询问如何加载子实体?如果是这样,您可以使用.Include方法进行快速加载。给定Person类和PhoneNumber类,其中Person具有PhoneNumber集合,您可以执行以下操作:

List<Person> People = db.People.Where(p => p.Name = "Henry")
                               .Include("PhoneNumbers")
                               .ToList();
List People=db.People.Where(p=>p.Name=“Henry”)
.包括(“电话号码”)
.ToList();
或者,您也可以执行所谓的显式加载,即加载实体并对要加载的子实体和相关实体的集合调用.load方法。通常,当您没有启用LazyLoading(并且LazyLoading在4.0+中默认启用,在以前的版本中不召回)时,您会这样做

无论如何查询和加载它们,都必须分离要附加到不同上下文的实体

这是一个很好的MSDN链接。

这是“按设计”。EF只能逐个分离实体,但同时EF不支持由附着实体和分离实体组成的对象图。因此,当您分离实体时,它将断开与附加对象图其余部分的所有关系。当前不支持分离整个对象图形,但您可以在上投票支持此功能

作为一种解决方法,您可以关闭上下文上的延迟加载,使用@CodeWarrior描述的快速加载来精确加载您需要传递到其他上下文的数据。加载数据后,将其序列化为流,并立即将其反序列化为对象图的新实例。这是如何对实体图进行深度克隆的方法,该实体图已分离,但所有关系都完好无损(需要关闭延迟加载,否则序列化也将加载所有其他导航属性,这可能导致比预期的对象图大得多)。唯一的要求是您的实体必须可由您选择的序列化程序序列化(请注意循环引用,循环引用通常需要对实体进行一些特殊处理或附加属性)。

什么是“相关实体都消失了”?