Fluent NHibernate表命名约定不起作用
我将以下约定加载到我的FNH配置中Fluent NHibernate表命名约定不起作用,nhibernate,fluent-nhibernate,conventions,Nhibernate,Fluent Nhibernate,Conventions,我将以下约定加载到我的FNH配置中 public class TableNameConvention : IClassConvention, IClassConventionAcceptance { public void Accept(IAcceptanceCriteria<IClassInspector> criteria) { criteria.Expect(x => x.TableName, Is.Not.Set); }
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 1.2.1一起使用…您试过了吗
m.FluentMappings.ConventionDiscovery.AddFromAssemblyOf<HiLoConvention>()
m.FluentMappings.ConventionDiscovery.AddFromAssemblyOf()
代替
m.FluentMappings.Conventions.AddFromAssemblyOf<HiLoConvention>()
m.FluentMappings.Conventions.AddFromAssemblyOf()
这个问题由来已久,但也许这可以帮助其他人:
我假设您希望在每个实体上设置约定,除非在映射中显式指定了表名。因此,要实现这一目标,您只需执行以下操作:
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
var tableName = instance.EntityType.Name.Pluralise();
instance.Table(tableName);
}
}
这将在所有实体上应用约定,除非在映射中明确指定了TableName。如何加载此约定?你能分享那个密码吗?@Suhas,当然可以。我已经更新了问题。ConventionDiscovery是哪个程序集的一部分?这不适合我。顺便说一句,惯例正在被接受。我可以调试并看到Accept()方法运行。但是Apply()没有。
m.FluentMappings.Conventions.AddFromAssemblyOf<HiLoConvention>()
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
var tableName = instance.EntityType.Name.Pluralise();
instance.Table(tableName);
}
}