Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF 4.1 RTM-实体类型配置_Entity Framework_Code First - Fatal编程技术网

Entity framework EF 4.1 RTM-实体类型配置

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

我一直在使用EF Code First CTP5,每个实体都有专用的映射类,如下所示:

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);
        }