Функция экспорта HBM в Fluent NHibernate, похоже, не работает.
Если я вызываю 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 в моей конфигурации на ноль, приложение запускается и работает без проблем. Как только я настраиваю путь экспорта (вызывая ExportTo), сгенерированные отображения вызывают исключение, как описано выше.
Глядя на экспортированные отображения, кажется, что мои соглашения не применяются - например, у меня есть соглашение по внешнему ключу, использующее регистр верблюдов и суффикс "Id", но когда я экспортирую файлы 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.
Есть идеи?