Я пытаюсь написать стратегию именования для NHibernate, которая будет добавлять префиксы к именам таблиц в зависимости от того, в какой сборке определено poco. Сейчас моя стратегия просто пытается добавить любой префикс к таблицам, чтобы доказать, что у меня есть вещи подключен правильно.
Проблема, с которой я сталкиваюсь, заключается в том, что я могу создать свой INamingStrategy и присоединить его к объекту конфигурации NHibernate, но, кажется, он никогда не используется. Вот пример кода:
private MsSqlConfiguration GetDatabaseConfiguration()
{
var configuration = MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigFileReader.GetConnectionString(ConnectionStringKey))
.ShowSql();
return configuration;
}
private FluentConfiguration GetFluentConfiguration()
{
return Fluently.Configure().Database(GetDatabaseConfiguration())
.Mappings(m =>
{
foreach (var assembly in GetAssembliesToLoadMappingsFrom())
m.FluentMappings.AddFromAssembly(assembly);
});
}
public global::NHibernate.Cfg.Configuration GetNHibernateConfiguration()
{
var nHibernateConfiguration = GetFluentConfiguration().BuildConfiguration();
var namingStrategy = GetNamingStrategy();
if (namingStrategy != null)
nHibernateConfiguration.SetNamingStrategy(namingStrategy);
return nHibernateConfiguration;
}
public void Build()
{
var schemaExport = new SchemaExport(GetNHibernateConfiguration());
schemaExport.Create(true, true);
}
Поместив точку останова в оператор return в GetNHibernateConfiguration (), я могу подтвердить, что nHibernateConfiguration.NamingStrategy содержит ссылку на мою стратегию. Однако размещение точек останова в каждом из членов этой стратегии, реализующих INamingStrategy, показывает, что ни один из них никогда не вызывается. Это подтверждается просмотром сгенерированной схемы, у которой нет префиксов.
Аналогично, используя тот же подход для создания фабрики сеансов, показывает, что операции CRUD также игнорируют стратегию.
Я что-то упускаю из виду?
Я использую NHibernate 2.1.1.4000