You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Entity Framework Core从视图中选择指定列?

EF Core 查询视图时仅选择指定列的解决方案
  • 问题根源:EF Core 对映射到视图的实体,若未明确配置主键,会将实体的所有属性视为键属性。此时查询时EF会强制加载所有列,以确保能唯一标识实体,即便你使用Select指定列也无效。而映射到表的实体通常会自动识别主键,因此不会出现该问题。

  • 解决方案:在实体配置类中显式指定主键:

修改你的MyClassConfig配置代码:

public class MyClassConfig : IEntityTypeConfiguration<MyClass>
{
    public void Configure(EntityTypeBuilder<MyClass> entity)
    {
        entity.ToTable(
            name: "MyClass_View",
            schema: DbContext.Schema);
        
        // 显式配置主键,替换为视图中实际的唯一标识列
        entity.HasKey(x => x.Id);
    }
}

若视图没有单一的唯一列,可配置复合主键:

entity.HasKey(x => new { x.Col1, x.Col2 });
  • 验证效果:配置主键后,重新执行查询代码:
var items = context.MyClassView.Where(x => x.Id == id)
              .Select(x => new
                           {
                                P1 = x.Prop1,
                                P2 = x.Prop2
                           });

此时EF Core会生成仅选择指定列的SQL,与你期望的一致:

SELECT [v].[Prop1], [v].[Prop2]
FROM [schema].[MyClass_View] AS [v]
WHERE [v].[Id] = @id

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:46:58