Функция экспорта HBM в Fluent NHibernate, похоже, не работает.Fluent NHibernate (1.2.0.712) экспортные сопоставления с HBM не работают/не соблюдают соглашения
Если я называю FluentMappingsContainer.ExportTo, сгенерированные отображения выходят неправильно, и я получаю следующее исключение:
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
Мой код конфигурации выглядит следующим образом:
MsSqlConfiguration database = MsSqlConfiguration.MsSql2008
.ConnectionString(GetConnectionString())
.Cache(c => c
.UseQueryCache()
.UseSecondLevelCache()
.ProviderClass<SysCacheProvider>()
);
database.ShowSql();
FluentConfiguration config = Fluently.Configure()
.Database(database)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>()
.Conventions.AddFromAssemblyOf<Entity>());
config.ExposeConfiguration(x =>
{
x.SetProperty("hbm2ddl.keywords", "auto-quote");
x.SetInterceptor(new ServiceInterceptor());
});
config.ExposeConfiguration(x => { x.SetProperty("current_session_context_class", "thread_static"); });
// Configure HBM export path, if configured:
var path = Service.Config.HbmExportPath;
if (!String.IsNullOrEmpty(path))
config.Mappings(m => m.FluentMappings.ExportTo(path));
// Build session factory:
_sessionFactory = config.BuildSessionFactory();
Установка HbmExportPath в моем конфигурация в null, приложение запускается и запускается без проблем. Как только я настраиваю путь экспорта (вызывая ExportTo для вызова), сгенерированные сопоставления вызывают исключение, как описано выше.
Если посмотреть на экспортированные сопоставления, то мои соглашения не применяются - например, у меня есть соглашение с внешним ключом, с использованием верблюжьего сундука и суффикса «ИД», но когда я экспортирую файлы HBM, первичные ключи последовательно названы с подчеркиванием и строчным «_id», например:
<class xmlns="urn:nhibernate-mapping-2.2" name="MyApp.Entities.Contact, MyApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Contact`">
...
<bag name="Departments" table="ContactDepartment">
<key>
<column name="Contact_id" />
</key>
<many-to-many class="MyApp.Entities.Department, MyApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="Department_id" />
</many-to-many>
</bag>
...
</class>
Я имел эту проблему с предыдущей версией и с текущей версией Fluent.
Любые идеи?
Автор (Джеймс Грегори) подтвердил, что эта функция является грубой и требует некоторой работы. Итак, эта работа - это путь, который нужно сделать сейчас - я закрываю эту тему и надеюсь, что этот ответ полезен кому-то другому. –
спасибо, я только начал смотреть на некоторые экспортированные файлы hbm.xml, и я подумал, что я схожу с ума, задаваясь вопросом, почему мое соглашение об именах таблиц отсутствует. Это решило мои проблемы! – dotjoe