实体框架 - 多个实体的虚拟表(代码优先)

时间:2017-01-06 18:56:21

标签: entity-framework inheritance code-first

我们正在构建一个包含多个实体的Context。所有实体都构建在具有ID(guid)的抽象类上。

我们希望所有实体都与公共Log表有关系,但是无法让EFCF理解由于命名而产生的关系。

public class Log {
  public BaseEntity Entity {get;set;}
  public Guid EntityID {get;set;}
}

public class Example : BaseEntity {
  public virtual ICollection<Log> Logs {get;set;}
}

任何人都可以帮助支持哪种模式?我们已经尝试抽象,设置OnModelCreating等,但由于没有支持的命名而不断出现模糊错误。如果我们添加这些;

[ForeignKey("EntityID")]
public Example Example {get;set;}
[ForeignKey("EntityID")]
public Example5 Example5 {get;set;}
[ForeignKey("EntityID")]
public Example2 Example2 {get;set;}

Log类的一组属性,一切正常。添加新的日志条目时会出现问题。

1 个答案:

答案 0 :(得分:0)

我想要一个可行且有效的解决方案,将公共字段抽象为基类。

在模型构建中使用MapInheritedProperties()(并遵循)

modelBuilder.Entity<Models.Example>().Map(x => x.MapInheritedProperties());

modelBuilder.Entity<Models.Log>()
    .HasRequired(x => x.BaseEntity)
    .WithMany(x => x.Logs)
    .Map(x =>
    {
        x.ToTable("Example");
        x.MapKey(new[] { "ID" });
    })
    .WillCascadeOnDelete(false);

我现在可以分配&#34;虚拟&#34;表到任何实体,只要它们派生自基类。