Entity Framework を使用して、既存のレガシー データベース上に新しいプロジェクトで 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 で 2 番目の識別子列を追加することでこの問題を解決している人を見てきましたが、前述したように、データベースを変更することはできません。
私が EF に求めていることは難しくないように思えるので、エンティティを正しく構成していないと思います。