Быстрая конвенция Автокарты Nhibernate для не - пустое поле

Кто-то мог помочь, как я дал бы автокарте команду не иметь - пустой указатель для столбца?

public class Paper : Entity
{
    public Paper() { }

            [DomainSignature]
            [NotNull, NotEmpty]
            public virtual string ReferenceNumber { get; set; }

            [NotNull]
            public virtual Int32 SessionWeek { get; set; }
}

Но я получаю следующее:

 <column name="SessionWeek"/>

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

7
задан RichardTheKiwi 27 January 2011 в 20:06
поделиться

3 ответа

Спасибо. Кроме того, для справочных свойств необходимо выполнить ReferenceConvention. Вот код, который работает:

public class ColumnNullConvention : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        if (instance.Property.MemberInfo.IsDefined(typeof(NotNullAttribute), false))
            instance.Not.Nullable();
    }

}  public class ReferenceConvention : IReferenceConvention
{
    public void Apply(FluentNHibernate.Conventions.Instances.IManyToOneInstance instance)
    {
        instance.Column(instance.Property.Name + "Fk");


        if (instance.Property.MemberInfo.IsDefined(typeof(NotNullAttribute), false))
            instance.Not.Nullable();

    }
}
4
ответ дан 7 December 2019 в 09:59
поделиться

Вот как я это делаю, в основном взято из ссылки, которую вы видите в коде. Там есть и другие полезные условные обозначения

HTH,
Беррил

/// <summary>
/// If nullability for the column has not been specified explicitly to allow NULL, then set to “NOT NULL”.
/// </summary>
/// <remarks>see http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/</remarks>
public class ColumnNullabilityConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(x => x.Nullable, Is.Not.Set);
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.Not.Nullable();
    }
}
1
ответ дан 7 December 2019 в 09:59
поделиться
public class Paper Map : IAutoMappingOverride<Paper >
{
    public void Override(AutoMapping<Paper> mapping)
    {
        mapping.Map(x => x.ReferenceNumber).Not.Nullable();
    }
}

Int32 по умолчанию не является типом, допускающим значение NULL. Int32? допускает значение NULL, поэтому вы можете сделать его не допускающим значения NULL, просто указав его как Int32.

Вы можете использовать соглашения, чтобы сделать это автоматически. Я не уверен, какое соглашение использовать, но взгляните на FluentNHibernate.Conventions.Instances, чтобы найти подходящее. Это будет выглядеть так.

public class ColumnConvention : IColumnConvention
{
    public void Apply(FluentNHibernate.Conventions.Instances.ColumnInstance instance)
    {
        if (instance.EntityType.IsDefined(typeof(NotNullAttribute), false))
            instance.NotNull = true;
    }

    public void Apply(FluentNHibernate.Conventions.Instances.IColumnInstance instance)
    {
        return;
    }
}

Просто добавьте это соглашение к своему автоматическому картированию.

0
ответ дан 7 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: