2011-02-04 113 views
3

我使用EF Codefirst在他們自己的表中有對象。現在我嘗試爲每個對象生成一個「存檔」,用於存儲在不同表格中的已更改對象。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 :-(即使我補充一下:

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

EF仍不重複派生類的屬性

有沒有人有想法如何實現這一點?

謝謝! Andreas

回答

3

是的,你需要調用像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"); 
    });    
} 
+0

檢查這個環節出去,http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part -3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx – hazimdikenli 2011-02-04 13:31:17

0

添加這裏文檔的緣故...如果你正在使用EntityTypeConfiguration,讓您的數據模型,不必那麼你需要使用EntityTypeConfiguration的地圖屬性像下面EF具體引用。

public class ArchivedPersonConfiguration : EntityTypeConfiguration<Person_Archieve> 
{ 
    Map(m => m.MapInheritedProperties()).ToTable("People_Archieve"); 
}