Entity Framework Code First是否允许在单独的文件中进行流畅的映射?

Mat*_*int 12 entity-framework fluent-interface ef-code-first

我正在使用Entity Framework Code First开发一个相当大的数据库模式.我更喜欢Fluent API而不是Data Annotations方法,因为它将我的域对象保留为简单的POCO.

为了使用Fluent API,我必须在继承自DbContext的类中重写OnModelCreating.

我不喜欢所有实体的所有映射都在这个方法中.我之前使用过类似FluentNHibernate的东西,每个实体都有自己的映射类.EF有类似的东西吗?

我想我可以创建自己的接口来实现一个映射类,并在OnModelCreating方法中调用它们.我可以使用反射或IoC来发现它们.我并没有特别看到这种方法有什么问题,但我想知道Entity Framework是否已经开箱即用了这样的东西?

Sla*_*uma 28

您可以为每个派生的实体创建一个配置类EntityTypeConfiguration<TEntity>,并将这些类放入单独的文件中.在派生中DbContext,将这些配置类的实例添加到模型构建器.例:

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        HasKey(u => u.UserName);

        Property(u => u.UserName)
            .HasMaxLength(50)
            .IsRequired();

        // etc.
    }
}

public class RoleConfiguration : EntityTypeConfiguration<Role>
{
    public RoleConfiguration()
    {
        HasKey(r => r.RoleName);

        // etc.
    }
}
Run Code Online (Sandbox Code Playgroud)

派生环境:

public class MyContext : DbContext
{
    //...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserConfiguration());
        modelBuilder.Configurations.Add(new RoleConfiguration());
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个ComplexTypeConfiguration<T>你可以从派生配置复杂的类型.

  • +1包括提到`ComplexTypeConfiguration <T>` (3认同)