【问题标题】:EF 4.1 RTM - EntityTypeConfigurationEF 4.1 RTM - EntityTypeConfiguration
【发布时间】:2011-04-19 15:38:58
【问题描述】:

我一直在为每个实体使用带有专用映射类的 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");
    }
}

并按照 Jonas Cannehag 在此处描述的方式加载它们: http://areaofinterest.wordpress.com/2010/12/08/dynamically-load-entity-configurations-in-ef-codefirst-ctp5/

但这在 RTM 中不起作用,我无法弄清楚如何使用专用映射类。你? :-)

【问题讨论】:

    标签: entity-framework code-first


    【解决方案1】:
    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);
            }
    

    【讨论】:

    • 在我看来并没有太大的活力。
    • 更新假设您的映射与 DbContext 和 Executing 程序集位于同一程序集中。如果没有,您可以添加/删除 Where 子句。
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多