2014-03-01 24 views
0

獲得組裝我使用實體框架數據庫映射類,在我ObjectContext類:使用Assembly.GetExecutingAssembly()從其他類庫

var typesToRegister = Assembly.GetExecutingAssembly().GetTypes() 
      .Where(type => !String.IsNullOrEmpty(type.Namespace)) 
      .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>)); 
      foreach (var type in typesToRegister) 
      { 
       dynamic configurationInstance = Activator.CreateInstance(type); 
       modelBuilder.Configurations.Add(configurationInstance); 
      } 

      //Replace with .... 
      //modelBuilder.Configurations.Add(new EntityMap()); 

上面的代碼獲得所有類typeof(EntityTypeConfiguration<>)。 如果我的'EntityMap'類與我的對象上下文在同一個類庫中,那沒關係,但是如果我在一個單獨的類庫中編寫了一個不起作用的函數。無法在ObjectContext上識別Map classes

+0

可能有其他解決方法;但是,在過去,我爲包含硬編碼的'Assembly.GetExecutingAssembly()'的方法添加了另一個參數,該參數接收包含類型的'Assembly'參數。然後''Assembly'從消費組裝中傳入。 –

+0

謝謝@MetroSmurf,你能解釋更多嗎? –

+0

從'var typesToRegister = Assembly.GetExecutingAssembly()。GetTypes()'將'Assembly.GetExecutingAssembly()'從包含方法中提取出來,以便它變成:'var typesToRegister = assemblyParamter.GetTypes()'。然後,只需將類型的Assembly引用作爲'assemblyParameter'的參數傳遞即可。 –

回答

0

我建議改變這個給:

var typesToRegister = typeof(MapClass).Assembly.GetTypes() 
         ..... 

其中MapClass是從EntityTypeConfiguration<T>那就是在其他組件繼承的類中的一個。

+0

謝謝@ argaz,但什麼是typeof(MapClass)!! ??我想找到每一個類'type.BaseType.GetGenericTypeDefinition()== typeof(EntityTypeConfiguration <>)什麼是MapClass –

+0

我的意思只是從EntityTypeConfiguration繼承的類之一 argaz

+0

謝謝,但它不是我的問題 –

0
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 

foreach (var assembly in assemblies) 
{ 
    assembly.GetTypes().Where(type => !String.IsNullOrEmpty(type.Namespace)) 
         .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>)); 
    foreach (var type in typesToRegister) 
    { 
     dynamic configurationInstance = Activator.CreateInstance(type); 
     modelBuilder.Configurations.Add(configurationInstance); 
    } 
} 

這應該讓你所有加載的程序集,而不是隻是當前的。

+0

我找不到'.GetTypes()',你確定代碼是正確的。 –

+0

對不起。我編輯了我的答案。 – clhereistian

+0

此代碼引發異常:mscorlib.dll中發生類型爲「System.Reflection.ReflectionTypeLoadException」的異常,但未在用戶代碼中處理 其他信息:無法加載一個或多個請求的類型。檢索LoaderExceptions屬性以獲取更多信息。 –