首页 > 解决方案 > 使用计算列映射到表和视图的实体

问题描述

使用 EF Core 5,我们现在能够将实体映射到表和视图。如果视图包含表中的所有列,还包含其他计算列,我们可以配置实体和映射以正常工作吗?例如,如果我更新实体,EF 会更新表,但我需要在表更新后重新评估视图中的计算列。就目前而言,EF 尝试重新评估表中的计算字段,但由于这些列不存在而失败。如果 EF 应该为每次读取从视图中提取,为什么在这种情况下它从表中读取?

此外,是否可以将视图中的这些附加列直接添加到 C# 实体,并使 EF 迁移对视图列表现适当?就目前而言,如果我保留视图列映射,EF 迁移将尝试在表而不是视图上创建这些列。

实体:

public class Blog {

    public int Id {get;set;}

    public string Name {get;set;}

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public string Status {get; private set;}

}

SQL 表:

Table Blogs {

    Id,

    Name

}

SQL 视图:

View BlogsView {

    SELECT * FROM Blogs,

    <INSERT COMPLEX QUERY HERE> AS Status

}

EF 核心地图:

protected override void OnModelCreating(ModelBuilder modelBuilder) {

    modelBuilder.Entity<Blog>().ToTable("Blogs").ToView("BlogsView");

}

EF Core 版本:5 数据库提供程序:Microsoft.EntityFrameworkCore.SqlServer 目标框架:.NET Core 3.1 操作系统:Windows 10 IDE:Visual Studio 2019 16.3

标签: .net-coreentity-framework-coreef-core-5.0

解决方案


推荐阅读