2009-01-12 64 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