Приложение имеет множество расширений узлов и содержат отображения для их классов. Мне нужно добавить префикс ко всем именам таблиц (base, join, many-to-many, ...) в этих сопоставлениях.Fluent NHibernate - имена таблиц переопределение
E.g.
Assembly: ~/bin/Extensions/Foo.dll
Original table: Page
New table: Ext_Foo_Page
Assembly: ~/bin/Extensions/Bar.dll
Original table: Page
New table: Ext_Bar_Page
Какой самый простой способ сделать это?
Я попробовал этот
public class TableNameConvention : IClassConvention, IJoinedSubclassConvention, IHasManyToManyConvention
{
private string getPrefix()
{
return "Ext_Test_";
}
public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance instance)
{
instance.Table(getPrefix() + instance.TableName);
}
public void Apply(FluentNHibernate.Conventions.Instances.IJoinedSubclassInstance instance)
{
instance.Table(getPrefix() + instance.TableName);
}
public void Apply(FluentNHibernate.Conventions.Instances.IManyToManyCollectionInstance instance)
{
instance.Table(getPrefix() + instance.TableName);
}
}
, но это не меняет имена таблиц, даже если эти методы выполняются.
EDIT - Конфигурация
var sb = new StringBuilder();
var sw = new StringWriter(sb);
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(b => b.Server(@".\SQLEXPRESS").Database("test123").Username("sa").Password("...")))
.Mappings(m => m.FluentMappings.AddFromAssembly(assembly).Conventions.Add<TableNameConvention>().ExportTo(sw))
.ExposeConfiguration(c => { new SchemaUpdate(c).Execute(false, true); })
.BuildSessionFactory();
var xml = sb.ToString();
, какая версия FNH вы используете? Вызывает ли это соглашение для классов в Foo.dll и Bar.dll (см. Instance.Type)? – Firo
FNH версия 1.2.0.712 и условность вызывается для всех отображений класса, но имена таблиц остаться один и тот же –