我正在使用 Entity Framework 在现有遗留数据库的新项目中创建 Table Per Heirachy 数据模型。这意味着我们不拥有数据库,因此我需要一个不涉及向 OrderDiscount 表添加列的解决方案。
我的数据模型中有以下结构:
┌────── (abstract) OrderDiscountBase ──────┐
│ │
│ │
SaleOrderDiscount ┌─── (abstract) SellerOrderDiscountBase ───┐
│ │
│ │
FreeShippingOrderDiscount PercentageValueOrderDiscount
有一个预先存在的鉴别器列来区分具体类型。它被调用DiscountType
并且可以保存值PercentageOffPromoDiscount
,FreeShippingPromoDiscount
或SaleDiscount
。
我的项目中有以下映射,不幸的是,它不起作用。
private void ConfigureOrderDiscountEntity(EntityTypeConfiguration<OrderDiscountBase> entity)
{
entity
.HasKey(orderDiscount => orderDiscount.Id)
.Map<SaleOrderDiscount>(
configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.Sale))
.Map<PercentageValueOrderDiscount>(
configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.PercentageOff))
.Map<FreeShippingOrderDiscount>(
configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.FreeShipping))
.ToTable(tableName: "OrderDiscount", schemaName: "Orders")
;
}
我看到的例外是:
EntityTypes SellerOrderDiscountBase、SaleOrderDiscount、FreeShippingOrderDiscount、PercentageValueOrderDiscount 被映射到表 OrderDiscountBase 中的相同行。映射条件可用于区分这些类型映射到的行。
我已经看到人们在旧版本的 Entity Framework 中通过添加第二个鉴别器列来解决这个问题,但正如我所说,我无法对数据库进行更改。
我要求 EF 做的事情听起来并不难,所以我假设我刚刚错误地配置了我的实体。