2

我遇到了Fluent NHibernate AutoPersistenceModelGenerator的問題。它不想拿起自定義地圖。自定義流利的NHibernate地圖不能與AutoMapping一起使用

使用Sharp Architecture 2.0,Fluent NHibernate 1.2和NHibernate 3.1。

我目前的相關配置如下:

public AutoPersistenceModel Generate() 
    { 
     // This mappings group works with the exception of custom maps!! 
     var mappings = AutoMap.AssemblyOf<SecurableEntity>(new AutomappingConfiguration()); 
     mappings.Conventions.Setup(GetConventions()); 
     mappings.IgnoreBase<Entity>(); 
     mappings.IgnoreBase<SecurableEntity>(); 
     mappings.IgnoreBase(typeof(EntityWithTypedId<>)); 
     mappings.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>(); 

     //mappings.UseOverridesFromAssemblyOf<UserMap>(); // Should call Override method of UserMap, but doesn't appear to... 
     mappings.Override<User>(new UserMap().Override()); // This hack fixes the issue with calling the Override method of UserMap. 
     mappings.UseOverridesFromAssemblyOf<UserMap>(); 

     return mappings; 
    } 

class UserMap : IAutoMappingOverride<User> 
{ 
    public void Override(AutoMapping<User> mapping) 
    { 
     //mapping => mapping.Table("Users"); 
     mapping.Table("Users"); 
    } 

    public Action<AutoMapping<User>> Override() 
    { 
     return map => 
      { 
       map.Table("Users"); 
      }; 
    } 
} 

我試着進行各種變通來配置和澆過的功能NHibernate互聯網的文章,都無濟於事。我有一個使用Sharp Arch 1.x的工作版本,以及早期版本的NHibernate和Fluent。我假設我錯過了一些語法上的改變。任何和所有的幫助將不勝感激。

謝謝! 約翰

回答

3

流利的NHibernate使用Assembly.GetExportedTypes() method得到給定大會的所有覆蓋。正如此方法的文檔所述,它獲得公開的類型在此程序集中定義的在程序集外可見。你的覆蓋隱含內部。只需在class UserMap之前添加public即可使用。

+0

哇,我爲那個道歉。很難相信我在這方面工作了很長時間,卻沒有注意到缺少公開訪問修飾符... – user1003221

+0

如果您發現答案有幫助,請立即投票。如果它解決了您的問題,請將其標記爲答案。謝謝! – NOtherDev

+0

非常有幫助的答案。 'Conventions.AddFromAssemblyOf'處理內部類型的所有權利,所以我永遠不會認爲'UseOverridesFromAssemblyOf'無法做到這一點。這是相當不一致的。 –

相關問題