Fluent-NHibernate - атрибуты свойств компонентов игнорируются конвенцией - PullRequest
1 голос
/ 31 марта 2010

У меня есть компонент с рядом свойств, которые имеют различные атрибуты

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

Для свойств компонента их нет. Нужна ли какая-то дополнительная проводка для них?

, например

public class Component
{
    [Length(Max=50)]
    public virtual string Name {get; set;}
}

public class MyClass
{
    public virtual Component Component {get; set;}

    [Length(Max=50)]
    public virtual string Color {get; set;}
}

Я получаю таблицу MyClass со столбцами Color & ComponentName

Цвет - это nvarchar (50), тогда как ComponentName - это nvarchar (255) (по умолчанию)

1 Ответ

2 голосов
/ 31 марта 2010

ОК, так что полагаться на встроенную магию, которая связывает атрибут NHibernate.Validators Length с длиной столбца вашей таблицы, кажется не очень хорошей идеей. Волшебство заключается в том, что для болотных стандартных классов это прекрасно понимается Fluent. Чтобы заставить это, я создал свою собственную Конвенцию, чтобы справиться с этим:

public class LengthConvention : AttributePropertyConvention<LengthAttribute>
    {
        protected override void Apply(LengthAttribute attribute, IPropertyInstance instance)
        {
            // override the default column length
            if (attribute.Max != default(int)) instance.Length(attribute.Max);
        }
    }
...