私は多くの投稿を調べましたが、私のような問題は見つかりませんでした
何らかの理由で、EF Code First を使用してデータベースを作成しているときに、クラス間の関係を正しくマップできません
クラスは - オーダー抽象クラス
public abstract class Order : IObjectWithState
{
public int OrderId { get; set; }
public OrderType Type { get; set; }
public string Status { get; set; }
[NotMapped]
public State ObjectState { get; set; }
public string CustomerId { get; set; }
}
そして、それを実装する 2 つのクラス:
public class SampleOrder : Order
{
public DateTime CreationDate { get; set; }
public DateTime CompletionDate { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
public virtual Address BillAddress { get; set; }
}
public class HideOrder : Order
{
public DateTime CreationDate { get; set; }
public DateTime CompletionDate { get; set; }
public bool Paid { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
public virtual Address BillAddress { get; set; }
}
これは Address クラスです:
public class Address : IObjectWithState
{
public int AddressId { get; set; }
public string AddressLine { get; set; }
public string Country { get; set; }
public string PostalCode { get; set; }
public bool Main { get; set; }
public string CustomerId { get; set; }
[NotMapped]
public State ObjectState { get; set; }
}
私のコンテキストクラスは次のようになります:
public PhoeniceContext() : base("Phoenice")
{
}
public DbSet<Address> Addresses { get; set; }
public DbSet<SampleOrder> SampleOrders { get; set; }
public DbSet<HideOrder> HideOrders { get; set; }
public DbSet<OrderItem> OrderItems { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SampleOrder>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("SampleOrders");
});
modelBuilder.Entity<HideOrder>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("HideOrders");
});
}
データベースを作成しようとすると、次のエラーが表示されます。
エンティティ タイプ「SampleOrder」と「Address」の間の関連付け「SampleOrder_BillAddress」は無効です。TPC 階層では、独立した関連付けはほとんどの派生型でのみ許可されます。
BillAddress プロパティを両方の注文クラスからコメントアウトすると、OrderItems へのマッピングが正しく動作します。Address アイテムへのマッピングがうまくいかないのはなぜですか??