1

抽象ベースから継承する 2 つのクラスで階層ごとのテーブル (TPH) を使用しようとしています。

public abstract class StatusLog : EntityBase
{
    public StatusLog()
        : base()
    {
        StatusChangeValidations = new List<StatusChangeValidation>();
    }

    public virtual List<StatusChangeValidation> StatusChangeValidations { get; set; }
    public int StatusId { get; set; }

}

public class DisputeStatusLog : StatusLog
{
    public virtual Dispute Dispute { get; set; }
}

public class StatementStatusLog : StatusLog
{
    public virtual Statement Statement { get; set; }
}

私はそれらを次のようにマッピングしました:

public class StatusLogMap : EntityTypeConfiguration<StatusLog>
{
    public StatusLogMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

                    ...
    }
}

public class DisputeStatusLogMap : EntityTypeConfiguration<DisputeStatusLog>
{
    public DisputeStatusLogMap()
    {
        // Relationships
        this.HasRequired(t => t.Dispute)
            .WithMany(t => t.StatusLogs)
            .Map(m => m.MapKey("ObjectInstanceID"));
    }
}

public class StatementStatusLogMap : EntityTypeConfiguration<StatementStatusLog>
{
    public StatementStatusLogMap()
    {
        // Relationships
        this.HasRequired(t => t.Statement)
            .WithMany(t => t.StatusLogs)
            .Map(m => m.MapKey("ObjectInstanceID"));
    }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<StatusLog>()
                    .Map<DisputeStatusLog>(e => e.Requires("ObjectID").HasValue("28"))
                    .Map<StatementStatusLog>(e => e.Requires("ObjectID").HasValue("111"));
}

これが機能することを期待していましたが、すぐに検証例外が発生します。

ObjectInstanceID: Name: Each property name in a type must be unique. Property name 'ObjectInstanceID' is already defined.

ObjectInstanceID の外部キー プロパティを追加し、MapKey の代わりに HasForeignKey を使用するようにマッピングを変更すると、わずかに異なるエラーが発生します。

ObjectInstanceID: : There is no property with name 'ObjectInstanceID' defined in the type referred to by Role 'StatusLog'.

マッピングに何か問題がありますか、それとも Entity Framework がまだサポートしていないシナリオですか? 私は現在、EF 6.01 の 9/23 ナイトリー ビルドを使用しています。これは、EF CodePlex サイトでこの問題を修正した可能性があることを読んだのですが、EF 6 RC1 でまったく同じエラーが発生しました。

これらのクラスを複数のテーブルに分割し、TPT を使用することでこれを修正できることはわかっていますが、これは既存のデータベースであるため、これは避けることをお勧めします。

4

0 に答える 0