【问题标题】:Entity-framework-7 Organizing Fluent API configurations into a separate classEntity-framework-7 将 Fluent API 配置组织到一个单独的类中
【发布时间】:2016-01-18 13:31:06
【问题描述】:

我很熟悉如何在 EF6 上将流畅的 API 配置组织到一个单独的类中,但是如何使用 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?从单独的类中实现流畅的 API 调用的正确方法是什么?

【问题讨论】:

  • 我推荐你使用dnx ef dbcontext scaffold现有的数据库生成模型(详见the answer)。如果您能获得足够复杂的数据库作为源,您将获得许多非常好的示例,如何在 EF7 中使用 fluent API。

标签: c# entity-framework ef-fluent-api


【解决方案1】:

试试这个:

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>());
}

【讨论】:

    【解决方案2】:

    我通常为我的所有实体类做的是提供一个静态方法,该方法在我的上下文实现中从我的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,而无需触及上下文。

    【讨论】:

    • 属性将随 EF7 消失
    • @Szer:你声明的来源?因为我看到那里会有属性/数据注释(github.com/aspnet/EntityFramework/wiki/Roadmap
    • 我指的是 .NET 属性,没有 EF 数据注释。
    • @L-Three 不知道他们改变了主意。我确信他们会删除注释并只保留代码优先的方式来建模关系。
    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2017-04-04
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多