实体框架-7 将 Fluent API 配置组织到一个单独的类中

本文关键字:一个 单独 框架 Fluent API 配置 实体 | 更新日期: 2023-09-27 18:30:53

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

下面是如何使用 EF6 执行此操作的示例:

型号配置.cs

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

并从 OnModelCreateating() 调用它

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

在 EF7 上,我无法解析实体类型配置?从单独的类实现流畅 API 调用的正确方法是什么?

实体框架-7 将 Fluent 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>());
}

我通常对所有实体类所做的是提供一个静态方法,该方法在我的上下文实现中从我的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);
   }
}

更进一步,您甚至可以自动执行该过程并使用属性动态生成上下文类。 这样,您只需要处理 POCO,而永远不会触及上下文。