我正在使用Entity Framework Code First开发一个相当大的数据库模式。我更喜欢Fluent API而不是Data Annotations方法,因为它将我的域对象保留为简单的POCO。
为了使用Fluent API,我必须在继承自DbContext的类中重写OnModelCreating。
我不喜欢我所有实体的所有映射都在这个方法中。我之前使用过类似FluentNHibernate的东西,每个实体都有自己的映射类。 EF有类似的东西吗?
我想我可以创建自己的接口来实现一个映射类,并在OnModelCreating方法中调用它们。我可以使用反射或IoC来发现它们。我并没有特别看到这种方法有什么问题,但我想知道Entity Framework是否已经开箱即用了这样的东西?
答案 0 :(得分: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());
}
}
您还可以派生ComplexTypeConfiguration<T>
来配置复杂类型。