2011-04-19 94 views
6

我一直在使用EF代碼優先CTP5專用映射類爲每個實體,像這樣:EF 4.1 RTM - EntityTypeConfiguration

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

並加載它們的方式喬納斯Cannehag描述這裏: http://areaofinterest.wordpress.com/2010/12/08/dynamically-load-entity-configurations-in-ef-codefirst-ctp5/

但是,這在RTM中不起作用,我無法弄清楚如何使用專用的映射類。你有嗎? :-)

回答

16
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); 
     } 
+0

看起來不太多的動態給我。 – 2011-04-19 16:12:30

+0

Ladislav說:-) – 2011-04-19 16:18:21

+0

更新假定你的映射和DbContext和* Executing *程序集在同一個程序集中。如果沒有,您可以添加/刪除Where子句。 – mxmissile 2011-04-19 17:44:29