C# 是否使用单个实体自动映射项目?

C# 是否使用单个实体自动映射项目?,c#,asp.net-mvc,entity-framework-6,automapper,C#,Asp.net Mvc,Entity Framework 6,Automapper,所以,我一直在使用AutoMapper和IQueryable扩展来为列表视图选择一些非常简单的视图模型。这允许我不加载整个entity framework对象,但我遇到了一个不太理想的情况,即需要为单个复杂对象提取一个简单的viewmodel userQuery.Where(u => u.Id == id).ProjectTo<SimpleUserViewModel>().FirstOrDefault(); userQuery.Where(u=>u.Id==Id.Projec

所以,我一直在使用AutoMapper和IQueryable扩展来为列表视图选择一些非常简单的视图模型。这允许我不加载整个entity framework对象,但我遇到了一个不太理想的情况,即需要为单个复杂对象提取一个简单的viewmodel

userQuery.Where(u => u.Id == id).ProjectTo<SimpleUserViewModel>().FirstOrDefault();
userQuery.Where(u=>u.Id==Id.ProjectTo().FirstOrDefault();
我可以做一个普通的AutoMapper.Map,但这会拉入整个对象和子对象,而我可能只需要子对象的一个属性,我不想消耗数据库检索成本


有没有更好的方法来获取单个实体并发出一个只用于抓取必要对象的选择实体框架?

它看起来效率很低,但事实并非如此

与许多其他LINQ方法一样,最显著的是它所取代的
Select
ProjectTo
依赖于延迟执行。直到它必须呈现(或处理)数据时,它才会提取数据

触发此执行的常见方法有
ToList
First
Single
(包括所有这些的
或default
Async
变体)。本质上,任何需要实际了解数据集本身的操作

我知道这种感觉,不能做像
ProjectToSingle(x=>x.Id==Id)
这样的事情感觉不那么优雅。如果它真的困扰您,您可以自己编写这个包装器方法,基本上将它转换为
Where
/
ProjectTo
/
单链

我也有同样的感觉,但我已经习惯于在
中编写
/
项目到
/
单曲,而且感觉不再有问题。这仍然比必须编写include语句要好得多


另外,即使您没有使用Automapper,但您仍然希望减少获取的列(因为您知道不需要所有列),而不是加载整个实体,您仍然需要使用
,其中
/
选择
/
单个
方法链


因此,Automapper没有使语法比常规LINQ/EF的语法更不优雅。

您好,您的方法有什么问题吗?我觉得不错-AM会做投影(
选择
),你做过滤(
,其中
+
第一个默认值
)。这种方法并不是很有内在问题,只是有点难看,不太干净。我希望AM能有一个简单的方法来做这件事。没有。AutoMapper用于帮助
选择
-ing。所有其他内容留给标准LINQ操作符。