【发布时间】:2012-11-15 15:46:33
【问题描述】:
我将以下约定加载到我的 FNH 配置中
public class TableNameConvention : IClassConvention, IClassConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
criteria.Expect(x => x.TableName, Is.Not.Set);
}
public void Apply(IClassInstance instance)
{
var tableName = instance.EntityType.Name.Pluralise();
instance.Table(tableName);
}
}
我没有在我的任何个映射中指定表名,但是这个约定并不适用。我正在使用 Fluent NHibernate 1.4.1.1。谁能发现我可能做错了什么?
更新
约定按以下方式加载:
public static NHibernate.Cfg.Configuration BuildConfiguration()
{
var connectionStringName = "mydb";
return Fluently.Configure(new NHibernate.Cfg.Configuration())
.Database(MsSqlConfiguration
.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey(connectionStringName))
.Dialect<MsSql2008Dialect>()
.AdoNetBatchSize(50))
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<Profile>();
m.FluentMappings.Conventions.Add(DefaultLazy.Always(), DynamicUpdate.AlwaysTrue(), DynamicInsert.AlwaysTrue());
m.FluentMappings.Conventions.AddFromAssemblyOf<HiLoConvention>();
})
.ExposeConfiguration(config => config.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, typeof(ManagedWebSessionContext).AssemblyQualifiedName))
.ExposeConfiguration(HiLoConvention.CreateScript)
.ExposeConfiguration(RunSchemaUpdate)
.BuildConfiguration();
}
所有约定与上面在 .AddFromAssembly() 方法调用中引用的 HiLoConvention 位于相同的程序集和命名空间中。
更新 2:
问题出在 Accept() 方法中,因为如果我删除了这个方法(以及类声明中的 IClassConventionAcceptance 接口),那么就会应用约定。我也尝试过这种期望无济于事
criteria.Expect(x => string.IsNullOrEmpty(x.TableName))
原始代码适用于 Fluent 1.2.1...
【问题讨论】:
-
你是如何加载这个约定的?你能分享那个代码吗?
-
@Suhas,当然。我已经更新了问题。
标签: nhibernate fluent-nhibernate conventions