Свободный NHibernate - autopping: разрешить ноль для отдельных свойств - PullRequest
2 голосов
/ 04 ноября 2010

Я знаю, что этот вопрос неоднократно поднимался в похожей форме, но ни одна из тем не могла дать мне конкретного ответа на мой вопрос.

Я использую 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, помечены как уже посещенные ...

Спасибо,
Arne

РЕДАКТИРОВАТЬ: Изменение заголовка ... Хотите разрешить NULL для отдельных свойств

1 Ответ

4 голосов
/ 04 ноября 2010

Создайте атрибут:

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

Удалите атрибут поверх ваших свойств.

...