有沒有辦法使用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