对模型使用class继承时,用的是哪个table?

Which table is used when using class inheritance for models?

我正在开发 .NET Core 3.1 Web API。假设我有以下模型 类:

这是一个指向名为 TableA 的基础数据库 table 的模型:

[Table("TableA")]
public class TableA
{
    public string ColumnA { get; set; }
}

这是一个从 TableA 继承的模型,但从数据库的视图中获取额外的列:

[Table("ViewTableA")]
public class ViewTableA : TableA
{
    public string ColumnA { get; set; }
    other properties from view ...
}

从数据库中读取时,我将使用 ViewTableA 模型进行查询。由于 ViewTableA 的属性 [Table("ViewTableA")] entity framework 生成查询以从 ViewTableA 视图中提取数据。

我的问题是我是否有以下情况:

ViewTableA objA = new ViewTableA(){ populate properties here};
TableA objB = (TableA)objA;

如果我将 objB 添加到 DBContext 并保存 table/view 会发生的更改? TableA table 因为 objB 是 TableA 类型,它具有 [Table("TableA")] 的属性,或者它仍然会点击名为 ViewTableA 的视图吗?

在您调用 db.Set<T>().Add(objB); 之前,

objB 不会被更改跟踪 如果您调用 db.Set<ViewTableA>().Add(objB),则一切正常。如果您调用 db.Set<TableA>().Add(objB),EF 可能会插入到 TableA 或 ViewTableA 中,或者失败。我不确定哪个,你不应该依赖这种行为。