在流利的NHHibernate中覆盖bool属性约定

时间:2012-10-02 09:25:06

标签: fluent-nhibernate automapper convention

我正在尝试Fluent Nhibernate的自动化功能..

我看到an example有一个默认的字符串约定as follows

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并且可以为空.Automapper如何知道将此约定仅应用于字符串?

此外,我想让我的所有bool都不可为空,并设置默认值为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");
        }
    }
}

但是如果我这样做并且在我的项目中也有默认的字符串约定..那么automapper如何知道应用约定的属性类型在哪里?

我尝试阅读fluent wiki on conventions,但没有找到任何有用的东西..

1 个答案:

答案 0 :(得分:1)

stringconvention应用于所有属性,但由于NHibernate忽略非字符串属性的长度,而nullable是默认值,它只是没有效果。您有两种方法可以过滤非bool属性

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

    }
}