2009-01-12 72 views

回答

2

## ## ## ## ##

UPDATE:
這個答案寫於2009年二月隨着速率的FluentNHibernate項目是改變,很可能該方法已被重新命名,或改變公約的機制已被移除。

## ## ## ## ##

我想從Rhino.Commons.ForTesting與FluentNHibernate使用DatabaseTextFixtureBase。我不斷遇到的問題是,FluentNHibernate在PersistenceModel類中爲NHibernate配置添加了神奇的功能,並且一旦調用DatabaseTestFixtureBase.InitializeNHibernateAndIoC(),您就可以使用NHibernate配置。Rhino.Commons私下執行一些東西並且您不再有權訪問NHibernate配置。

事實證明,我最後的假設是錯誤的。如果你使用容器註冊一個INHibernateInitializationAware服務,它將在調用CreatConfigs()時被NHibernateUnitOfWorkTestContext拾取。

的INHibernateInitializationAware實現,我使用看起來像這樣:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware 
{ 
    public void BeforeInitialization(){} 

    public void Configured(Configuration cfg) 
    { 
     var persistenceModel = new PersistenceModel 
            { 
             Conventions = 
              { 
               GetForeignKeyName = (prop => prop.Name + "Id"), 
               GetForeignKeyNameOfParent = (prop => prop.Name + "Id") 
              } 
            }; 
     persistenceModel.addMappingsFromAssembly(typeof(OneOfMyMappingClasses).Assembly); 
     persistenceModel.Configure(cfg); 

    } 

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){} 
} 

當然的約定可以通過任何你碰巧使用的更換。

享受!


如果您使用的是最新版本的FluentNHibernate,您可能會使用Fluently類來配置映射。這裏的FluentNHibernateInitializationAwareConfigurator的另一個版本:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware 
{ 
    public void BeforeInitialization(){} 

    public void Configured(Configuration cfg) 
    { 
     Fluently.Configure().Mappings(m => 
     { 
      m.FluentMappings.AddFromAssemblyOf<User>() 
       .AlterConventions(convention => 
        { 
         convention.GetForeignKeyName = (prop => prop.Name + "Id"); 
         convention.GetForeignKeyNameOfParent = (prop => prop.Name + "Id"); 
        } 
       ); 
      m.Apply(cfg); 
     }); 
    } 

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){} 
} 
+0

謝謝 我給它一個嘗試,讓你知道! – fromano 2009-02-03 20:07:24