5

EF Codefirst を使用して、独自のテーブルにオブジェクトがあります。ここで、オブジェクトごとに別々のテーブルにある、変更されたオブジェクトの「アーカイブ」を作成しようとしています。

例えば:

public class Person  
{  
    [Key]
    public virtual Guid Id { get; set; }

    [Required]
    public string Name { get; set; }
}

public class Person_Archive : Person 
{
    [Key]
    [Columnn( Order = 1 )]
    public override Guid Id { get; set; }

    [Key]
    [Columnn( Order = 2 )]
    public DateTime ChangedAt { get; set; }

    public string ChangedBy { get; set; }
}

EFにモデルを作成させると、Person_ArchiveにPersonのプロパティは含まれません:-(追加しても:

modelBuilder.Entity<Person>().ToTable( "Person" );
modelBuilder.Entity<Person_Archiv>().ToTable( "Person_Archiv" );

EF は、派生クラスからのプロパティを繰り返しません。

それを達成する方法を知っている人はいますか?

ありがとう!アンドレアス

4

2 に答える 2

5

MapInheritedPropertiesええ、それを行うにはメソッドのようなものを呼び出す必要があります。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>().Map(m =>
    {
        m.MapInheritedProperties();
        m.ToTable("People");
    });

    modelBuilder.Entity<Person_Archieve>().Map(m =>
    {
        m.MapInheritedProperties();
        m.ToTable("People_Archieve");
    });            
}
于 2011-02-04T13:28:25.340 に答える
0

ドキュメントのためにここに追加します... EntityTypeConfiguration を使用してデータモデルが EF 固有の参照を持たないようにしている場合は、以下のように EntityTypeConfiguration の Map プロパティを使用する必要があります。

public class ArchivedPersonConfiguration : EntityTypeConfiguration<Person_Archieve>
{
    Map(m => m.MapInheritedProperties()).ToTable("People_Archieve");
}
于 2015-10-21T13:46:49.900 に答える