2011-02-04 3 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-choose-strategy-guidelines.aspx – hazimdikenli

+0

Большое спасибо! Это работает как шарм! – nttakr

+0

Это очень помогло мне. Спасибо тон за этот ответ. –

0

Добавление здесь ради документации ... если вы используете EntityTypeConfiguration, чтобы сохранить вашу модель данных от наличия EF конкретных ссылок, то вам необходимо использовать Map свойство EntityTypeConfiguration, как показано ниже.

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

 Смежные вопросы

  • Нет связанных вопросов^_^