对模型使用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 中,或者失败。我不确定哪个,你不应该依赖这种行为。
我正在开发 .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 中,或者失败。我不确定哪个,你不应该依赖这种行为。