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 而永远不会触及上下文。
我很熟悉如何在 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 而永远不会触及上下文。