1

Fluent Nhibernate の automap 機能を試しています。

のようなデフォルトの文字列規則を持つ例を見ました:

namespace Vuscode.Framework.NHibernate.Conventions
{
    using FluentNHibernate.Conventions;
    using FluentNHibernate.Conventions.Instances;

    public class DefaultStringPropertyConvention : IPropertyConvention
    {
        public void Apply(IPropertyInstance instance)
        {
            instance.Length(100);
            instance.Nullable();
        }
    }
}

ここでは、 が文字列型であるかどうかをチェックするものは何もありませんinstance.. 長さを 100 にし、null 可能にするだけです. Automapper は、この規則を文字列にのみ適用することをどのように認識しますか?

さらに、すべてのブール値を null 不可にして、デフォルト値を 0 に設定したいので、上記の例に従うと、次のようになります。

namespace Vuscode.Framework.NHibernate.Conventions
{
    using FluentNHibernate.Conventions;
    using FluentNHibernate.Conventions.Instances;

    public class DefaultBoolPropertyConvention : IPropertyConvention
    {
        public void Apply(IPropertyInstance instance)
        {
            instance.Not.Nullable();
            instance.Default("0");
        }
    }
}

しかし、私がそれを行い、プロジェクトにデフォルトの文字列規則もある場合..では、オートマッパーはどのプロパティタイプに規則が適用されているかをどのように知るのでしょうか?

規則に関する流暢な wiki を読んでみましたが、役に立つものは何も見つかりませんでした..

4

1 に答える 1

1

stringconvention はすべてのプロパティに適用されますが、NHibernate は非文字列プロパティの長さを無視し、nullable がデフォルトであるため、効果はありません。ブール値以外のプロパティをフィルタリングするには、2 つのオプションがあります

public void Apply(IPropertyInstance instance)
{
    if (instance.Type == typeof(bool))
    {
        instance.Not.Nullable();
        instance.Default("0");
    }
}

// or

public class DefaultBoolPropertyConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(i => i.Type == typeof(bool));
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.Not.Nullable();
        instance.Default("0");

    }
}
于 2012-10-05T10:12:13.100 に答える