首页 文章

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

提问于
浏览
12

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

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

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

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

1 回答

  • 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.
        }
    }
    

    派生环境:

    public class MyContext : DbContext
    {
        //...
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new UserConfiguration());
            modelBuilder.Configurations.Add(new RoleConfiguration());
        }
    }
    

    您还可以派生出_2800554来配置复杂类型 .

相关问题