c# - NotMapped 属性导致在 EF Core 的 select 语句中加载所有属性
问题描述
我在一个项目中使用 EF Core 5,我的一个实体包含一个 NotMapped 属性,该属性混合了实体的两个属性,我希望在 select 语句中只有包含在 select 语句中的属性从数据库加载但在分析之后,我已经看到已加载所有属性。
作为示例,Contact 实体包含一个 NotMapped 属性,如下所示。
public class Contact
{
public int ContactId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[NotMapped]
public string FullName => $"{FirstName} {LastName}";
public string Email { get; set; }
public string Phone { get; set; }
public string Address { get; set; }
}
public class SampleContext : DbContext
{
public DbSet<Contact> Contacts { get; set; }
}
在以下查询中,我只需要 ContactId 和 FullName,我希望在 TSQL 查询中只加载 ContactId、FirstName、LastName,但所有属性都已加载。
var list = dbContext.Contacts.Select( e => new
{
e.ContactId,
e.FullName
}).ToList();
解决方案
如果您只想加载一些列,您可以:
var list = dbContext.Contacts
.Where(...)
.Select( e => new
{
e.ContactId,
LastName = e.FirstName + " " + e.LastName
})
.ToList() // hit the database
推荐阅读
- typescript - 有没有办法修复 React Quill 图像大小调整错误?
- c# - 是否可以为evertything提供边界半径
- django - 在 django 中翻译模型的一个字段
- python - 如何从另一个数组中减去一个 NumPy 数组,条件是第一个数组的元素
- c# - Difference between Any() and FirstOrDefault() !=null when querying database with EF Core
- google-apps-script - 从 Google 表格中导出图片
- xcode - Xcode:有没有办法添加 *run-phase* pre-action 脚本?(提示:不是构建阶段)
- bash - 使用 mapfile 调用 rsync
- php - PHP Cassandra 随机繁忙的 I/O 线程,请求超时
- typescript - 将任何[] 转换为字符串[] | 将列表(任意)转换为列表(字符串)