4

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 で動作しました...

4

2 に答える 2

0

やってみました

m.FluentMappings.ConventionDiscovery.AddFromAssemblyOf<HiLoConvention>()

代わりに

m.FluentMappings.Conventions.AddFromAssemblyOf<HiLoConvention>()
于 2012-11-16T10:13:46.843 に答える