【问题标题】:EF Codefirst How to create separate table for derived class?EF Code First 如何为派生类创建单独的表?
【发布时间】:2011-02-04 13:23:47
【问题描述】:

我使用 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 仍然不重复派生类的属性。

有人知道如何实现吗?

谢谢! 安德烈亚斯

【问题讨论】:

    标签: c# entity-framework-4 ef-code-first


    【解决方案1】:

    是的,您需要调用类似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");
        });            
    }
    

    【讨论】:

    【解决方案2】:

    为了文档添加在这里...如果您使用 EntityTypeConfiguration 来防止数据模型具有 EF 特定引用,那么您需要使用 EntityTypeConfiguration 的 Map 属性,如下所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多