首页 > 解决方案 > 将实体映射到视图和表格

问题描述

考虑下面的模型。我有一个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指向视图。

现在我想执行插入、更新和删除。这带来了一个问题,因为无法使用带有 an 的视图来OUTER APPLY进行这些更改。我已经尝试为此使用查询类型,但您不能将实体同时定义为查询类型和实体类型。这样做会导致我出错。因此,将 a 添加TableAttribute到实际表中,例如Order结合 withmodelBuilder.Query<Order>().ToView("SelectOrder");是行不通的。

我可以创建一个单独的类 SelectOrder,它映射到视图并将我的 Order 实体映射到表。或者我可以构建一个自定义属性并通过覆盖SqlServerQuerySqlGenerator.

但在我走上这些道路之前......真的不可能将实体映射到用于选择的视图和用于插入、更新和删除的表吗?

标签: c#entity-framework-core

解决方案


由于 .NET 5 预览版已发布,因此可以支持查询分离和更新映射

参考。https://github.com/dotnet/efcore/issues?q=is%3Aissue+milestone%3A5.0.0-preview2+is%3Aclosed+label%3Atype-enhancement+is%3Aclosed


推荐阅读