Entity framework 如果我';如果我从Linq-2-Entities查询返回一个新的匿名类型,我是否需要将它们从上下文中分离出来?

Entity framework 如果我';如果我从Linq-2-Entities查询返回一个新的匿名类型,我是否需要将它们从上下文中分离出来?,entity-framework,linq-to-entities,dto,Entity Framework,Linq To Entities,Dto,在返回一组L2E实体之后,我们将数据复制到新的普通数据传输对象(DTO)中,这些对象没有附加到数据上下文。我们这样做是因为在保存数据时,可能会无意中检测到对这些实体的更改并将其持久化到数据库中 如果不是返回一个表示真实数据库记录的实体,而是返回一个匿名类型,那么我是否可以正常地返回这样的实例,而不用担心首先将它们的数据复制到新对象中?这样一个匿名实体可以表示多个表之间的连接,甚至可能最终没有ID,因此我可以想象对这些对象的更改无论如何都无法跟踪/检测。如果它们以某种方式存在,我是否可以将它们从上

在返回一组L2E实体之后,我们将数据复制到新的普通数据传输对象(DTO)中,这些对象没有附加到数据上下文。我们这样做是因为在保存数据时,可能会无意中检测到对这些实体的更改并将其持久化到数据库中

如果不是返回一个表示真实数据库记录的实体,而是返回一个匿名类型,那么我是否可以正常地返回这样的实例,而不用担心首先将它们的数据复制到新对象中?这样一个匿名实体可以表示多个表之间的连接,甚至可能最终没有ID,因此我可以想象对这些对象的更改无论如何都无法跟踪/检测。如果它们以某种方式存在,我是否可以将它们从上下文中分离出来,而不是在返回它们之前复制它们?或者我可以直接返回它们而不用担心分离它们吗?

匿名类型或非“实体类型”永远不会被跟踪。所以你可以

from a in context.Table select new { x = a.X }

您还可以:

  • 使用
    AsNoTracking()
  • 管理环境的生命周期:对生活环境进行修改
  • 从上下文中分离实体:当心图形上的副作用=相关实体将设置为null
from a in context.Table select new NonEntityType { x = a.X }