Fluent NHibernate表命名约定不起作用

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); }

我将以下约定加载到我的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 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);
    }
}