【发布时间】:2015-08-14 22:02:25
【问题描述】:
我正在使用实体框架在现有遗留数据库的新项目中创建 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 做的事情听起来并不难,所以我认为我只是错误地配置了我的实体。
【问题讨论】:
标签: c# entity-framework tph