有没有办法使用Rhino.Commons和Fluent Nhibernate(特别是AutoMapping)?Rhino.Commons + Fluent NHibernate
非常感谢
fromano
有没有办法使用Rhino.Commons和Fluent Nhibernate(特别是AutoMapping)?Rhino.Commons + Fluent NHibernate
非常感谢
fromano
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){}
}
谢谢 我给它一个尝试,让你知道! – fromano 2009-02-03 20:07:24