Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
C# 如何仅包含实体的一部分_C#_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何仅包含实体的一部分

C# 如何仅包含实体的一部分,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我有一个linq查询,它工作得很好 var items = this._context.History.Where(a => a.ItemId == id).Include(a=> a.AppUser.ApplicationUser).ToList(); 但是,有一个问题。包括应用程序用户,以获取用户的名字和姓氏。但剩下的部分是不需要的 真正的问题是,由于ApplicationUser现在位于上下文中,因此一个完全不同的查询(不包括ApplicationUser)最终会填充Ap

我有一个linq查询,它工作得很好

 var items  = this._context.History.Where(a => a.ItemId == id).Include(a=> a.AppUser.ApplicationUser).ToList();
但是,有一个问题。包括
应用程序用户
,以获取用户的
名字
姓氏
。但剩下的部分是不需要的

真正的问题是,由于
ApplicationUser
现在位于上下文中,因此一个完全不同的查询(不包括
ApplicationUser
)最终会填充
ApplicationUser
,并将其发送到客户端(安全性)

但我真正需要的是这个表中的
ApplicationUser.FirstName
ApplicationUser.LastName


我能想到的唯一解决办法是为一个查询创建一个新的
Context()
,但这似乎违反了正在使用的D.I.模式。无需保存更改,只需获取数据以供显示。

为什么不为每个查询返回DTO?@CodeNotFound您可以给我一个示例吗?您创建的DTO类只包含所需的属性,并使用该类将EF结果投影到该类。“它只是获取数据以供显示”然后创建一个只包含显示所需数据的类(也称为ViewModel、DTO等),并使用投影查询(
Select
)填充该类。实体类和即时加载用于表示完整的表记录数据(而不是部分查询)。如果要明确告诉上下文不要跟踪检索的实体,您可能还需要查看
.AsNoTracking()
。在某些情况下,它也可以提高性能。
 this.DbSet.Where(a => a.EntityStatusId == (int)EntityStatus.Enum.Active && a.ItemId == entityId ).Include(a=> a.AppUser).ToList();