# # # # # # # # # #
UPDATE:
Этот ответ был написан в феврале 2009 года. Учитывая скорость изменения проекта FluentNHibernate, весьма вероятно, что метод был переименован или механизм изменения конвенций был перемещен.
# # # # # # # # # #
Я хотел использовать DatabaseTextFixtureBase из Rhino.Commons.ForTesting с FluentNHibernate. Проблема, с которой я постоянно сталкивался, заключалась в том, что FluentNHibernate добавляет свою магию в конфигурацию NHibernate в классе PersistenceModel, и попал в руки к конфигурации NHibernate после вызова DatabaseTestFixtureBase.InitializeNHibernateAndIoC (). Rhino.Commons делает кучу вещей в частном порядке. и у вас больше нет доступа к конфигурации NHibernate.
Как оказалось, мое последнее предположение было неверным. Если вы зарегистрируете службу INHibernateInitializationAware в контейнере, она будет подхвачена NHibernateUnitOfWorkTestContext при вызове CreatConfigs ().
Используемая мной реализация 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){}
}