Entity-framework-7 将 Fluent API 配置组织成单独的 class

Entity-framework-7 Organizing Fluent API configurations into a separate class

我很熟悉如何在 EF6 上将流畅的 API 配置组织到单独的 class 中,但如何使用 EF7 实现这一点?

这是一个如何使用 EF6 执行此操作的示例:

ModelConfigurations.cs

public class ModelConfigurations : EntityTypeConfiguration<Blog>
{
     ToTable("tbl_Blog");
     HasKey(c => c.Id);
// etc..
}

并从 OnModelCreating() 调用它

    protected override void OnModelCreating(DbModelbuilder modelBuilder)
    {
          modelBuilder.Configurations.Add(new ModelConfigurations());
// etc...
    }

在 EF7 上我无法解析 EntityTypeConfiguration?从单独的 class 实现流畅的 API 调用的正确方法是什么?

试试这个:

public class BlogConfig
{
    public BlogConfig(EntityTypeBuilder<Blog> entityBuilder)
    {
        entityBuilder.HasKey(x => x.Id);
        // etc..
    }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    new BlogConfig(modelBuilder.Entity<Blog>());
}

我通常为我的所有实体 classes 做的是提供一个静态方法,该方法在我的上下文实现中从我的 OnModelCreating 方法调用:

public class EntityPOCO {
    public int Id { get; set; }

    public static OnModelCreating(DbModelBuilder builder) {
        builder.HasKey<EntityPOCO>(x => x.Id);
    }
}

...

public class EntityContext : DbContext {
   public DbSet<EntityPOCO> EntityPOCOs { get; set; }

   protected override void OnModelCreating(DbModelBuilder modelBuilder) {
      base.OnModelCreating(modelBuilder);
      EntityPOCO.OnModelCreating(modelBuilder);
   }
}

更进一步,您甚至可以自动化该过程并使用属性即时生成上下文 class。这样你只需要处理 POCOs 而永远不会触及上下文。