首页 > 解决方案 > 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();

标签: c#entity-framework.net-coreentity-framework-core

解决方案


如果您只想加载一些列,您可以:

var list = dbContext.Contacts
    .Where(...)
    .Select( e => new
    {
        e.ContactId,
        LastName = e.FirstName + " " + e.LastName
    })
    .ToList() // hit the database 

推荐阅读