映射实体以查看和表格

时间:2019-05-06 20:43:28

标签: c# entity-framework-core

请考虑以下模型。我有一个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,例如OrdermodelBuilder.Query<Order>().ToView("SelectOrder");结合使用无效。

我可以创建一个单独的类SelectOrder,将其映射到视图并将我的Order实体映射到表。或者,我可以通过覆盖SqlServerQuerySqlGenerator来构建自定义属性并执行一些自定义SQL生成。

但是在我走这条路之前...真的不可能同时将一个实体既映射到选择视图又将表映射到插入,更新和删除表吗?

2 个答案:

答案 0 :(得分:0)

也许不是您要找的答案,但是您可以将计算出的OrderTotal属性添加到数据库中的Order表中。

答案 1 :(得分:0)

自.NET 5 Preview版本发布以来,可以支持查询分离和更新映射

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