流畅的NHibernate - 自动化:允许单个属性为null

时间:2010-11-04 14:21:59

标签: fluent-nhibernate properties automapping notnull

我知道这个问题已经多次以类似的形式提出,但没有一个主题可以给我具体回答我的问题。

我使用Fluent NHibernate和Fluent的自动映射来映射我的域实体。现在,我使用此约定类来设置所有属性 NOT NULL

public class NotNullColumnConvention : IPropertyConvention
{
    public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
    {
        instance.Not.Nullable();
    }
} 

最大的问题是:

我需要做什么,才能让我的实体类的单个属性 NULL

这是我的一个实体类:

public class Employee : Entity
{
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
如果有人能帮助我的话,我真的很高兴!我已输入Google返回页面的所有可能的搜索字符串,标记为已访问过...

谢谢,
·阿尔

编辑:更改了标题...想要允许单个属性 NULL

1 个答案:

答案 0 :(得分:4)

创建一个属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class CanBeNullAttribute : Attribute
{
}

一个惯例:

public class CanBeNullPropertyConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(
            x => !this.IsNullableProperty(x)
            || x.Property.MemberInfo.GetCustomAttributes(typeof(CanBeNullAttribute), true).Length > 0);
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.Nullable();
    }

    private bool IsNullableProperty(IExposedThroughPropertyInspector target)
    {
        var type = target.Property.PropertyType;

        return type.Equals(typeof(string)) || (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)));
    }
}

将属性放在属性的顶部。