请考虑以下模型。我有一个Order
类和一个OrderLine
类。 Order.TotalAmount
是通过在所有OUTER APPLY
上执行Order.OrderLines
的视图计算得出的。
[Table("SelectOrder")]
public class Order
{
public decimal TotalAmount { get; set; }
public virtual ICollection<OrderLine> OrderLines { get; set; }
}
[Table("SelectOrderLine")]
public class OrderLine
{
public decimal Amount { get; set; }
public virtual Order Order { get; set; }
}
我已经用TableAttribute
装饰了类,以使Entity Framework Core能够将数据从视图获取到实体。 TableAttribute
实际上指向该视图。
现在,我想执行插入,更新和删除操作。这带来了一个问题,因为无法对这些更改使用带有OUTER APPLY
的视图。我尝试为此使用查询类型,但是您不能同时将实体定义为查询类型和实体类型。这样做对我造成了错误。因此,在实际表中添加TableAttribute
,例如Order
与modelBuilder.Query<Order>().ToView("SelectOrder");
结合使用无效。
我可以创建一个单独的类SelectOrder,将其映射到视图并将我的Order实体映射到表。或者,我可以通过覆盖SqlServerQuerySqlGenerator
来构建自定义属性并执行一些自定义SQL生成。
但是在我走这条路之前...真的不可能同时将一个实体既映射到选择视图又将表映射到插入,更新和删除表吗?
答案 0 :(得分:0)
也许不是您要找的答案,但是您可以将计算出的OrderTotal属性添加到数据库中的Order表中。
答案 1 :(得分:0)
自.NET 5 Preview版本发布以来,可以支持查询分离和更新映射