Entity framework EF 4.1 RTM-实体类型配置
我一直在使用EF Code First CTP5,每个实体都有专用的映射类,如下所示:Entity framework EF 4.1 RTM-实体类型配置,entity-framework,code-first,Entity Framework,Code First,我一直在使用EF Code First CTP5,每个实体都有专用的映射类,如下所示: public class UserMapping : EntityTypeConfiguration<User> { public UserMapping() { ToTable("Users"); HasKey(t => t.ID); Property(t => t.ID).HasColumnName("user_id
public class UserMapping : EntityTypeConfiguration<User>
{
public UserMapping()
{
ToTable("Users");
HasKey(t => t.ID);
Property(t => t.ID).HasColumnName("user_id");
Property(t => t.Name).HasColumnName("name");
}
}
公共类用户映射:EntityTypeConfiguration
{
公共用户映射()
{
ToTable(“用户”);
HasKey(t=>t.ID);
属性(t=>t.ID);
属性(t=>t.Name);
}
}
按照Jonas Cannehag在这里描述的方式加载:
但这在RTM中不起作用,我还没有弄明白如何使用专用的映射类。有吗?:-)
动态版本(可能应在投入生产前进行广泛测试)
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
var类型存储寄存器=
Assembly.GetExecutionGassembly().GetTypes().Where(
类型=>
type.BaseType.IsGenericType&&
type.BaseType.GetGenericTypeDefinition()==typeof(EntityTypeConfiguration));
foreach(TypeStoreRegister.Select(Activator.CreateInstance)中的对象配置实例)
{
modelBuilder.Configurations.Add((动态)configurationInstance);
}
基于模型创建(modelBuilder);
}
在我看来没有太大的动态性。更新假定您的映射与DbContext和正在执行的程序集位于同一程序集中。如果没有,则可以添加/删除Where子句。
public class DataContext : DbContext
{
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMapping());
base.OnModelCreating(modelBuilder);
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var typesToRegister =
Assembly.GetExecutingAssembly().GetTypes().Where(
type =>
type.BaseType.IsGenericType &&
type.BaseType.GetGenericTypeDefinition() == typeof (EntityTypeConfiguration<>));
foreach (object configurationInstance in typesToRegister.Select(Activator.CreateInstance))
{
modelBuilder.Configurations.Add((dynamic) configurationInstance);
}
base.OnModelCreating(modelBuilder);
}