2009-10-05 53 views
3

是否可以映射Fluent NHibernate中的多個程序集中的實體?流利的NHibernate - 從多個程序集映射實體

我試圖

AutoPersistenceModel 
.MapEntitiesFromAssemblyOf<Class1>() 
.AddEntityAssembly(assembly) 

但它只是從「裝配」加載實體,而不是從1類的父類程序集。

編輯。 我想通了。我不得不更新功能NHibernate到1.0版本,在那裏你可以做這樣的:

AutoMap 
.AssemblyOf<Class1>() 
.AddEntityAssembly(typeof(UserEntity).Assembly) 

回答

4

我想通了。我不得不更新功能NHibernate到1.0版本,在那裏你可以做這樣的:

AutoMap 
.AssemblyOf<Class1>() 
.AddEntityAssembly(typeof(UserEntity).Assembly) 
0

看來你只能叫AddEntityAssembly一次,讀到這裏的discussion

我想它會覆蓋您的上一行。

+0

是的,這就是爲什麼我在尋找一種方式,而無需修改流利映射2個組件。 – 2009-10-05 15:44:34

2

我們多次使用NHibernate.Cfg.Configuration.AddAssembly()成功映射多個程序集中的實體。代碼片段如下。正如您所看到的,我們檢查當前域中的所有程序集,並且添加了任何名爲「HibernatePersistenceAssembly」的自定義屬性的程序集。我們簡單地創建了這個屬性,以便這個循環能夠知道哪些程序集中有NHibernate實體,但是你可以使用任何你想要決定添加哪些程序集的方案,包括如果你想要的話只是硬連線。

在AssemblyInfo.cs中對於具有NHibernate的實體在它的每個組件:

 
[assembly: HibernatePersistenceAssembly()] 

然後在我們的Hibernate工具類:

 

     public NHibernate.Cfg.Configuration ReloadConfiguration() 
     { 
      configuration = new NHibernate.Cfg.Configuration(); 
      configuration.Configure(); 
      ConfigureConnectionString(); 
      ConfigureAssemblies(); 

      return configuration; 
     } 

     private void ConfigureAssemblies() 
     { 
      foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) 
      { 
       foreach (object attribute in assembly.GetCustomAttributes(true)) 
       { 
        if (attribute is HibernatePersistenceAssembly) 
         configuration.AddAssembly(assembly); 
       } 
      } 
     } 
0

你可以做類似於尖銳做一些事情。

foreach (var assemblyName in mappingAssemblies) 
{ 
    Assembly assembly = Assembly.Load(assemblyName); 
    m.FluentMappings.AddFromAssembly(assembly); 
} 

這對我來說至少有效。

+1

請解釋你爲什麼低調,這是一個完全可以接受的解決方案,曾經是這個問題。 – mhenrixon 2011-10-26 12:46:47