Свободное владение NHibernte Изменениями / Соглашениями

StackOverflow https://stackoverflow.com/questions/807595

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне нравится схема, которую я увидел в этом посте в блоге (http://marekblotny.blogspot.com/2009/04/conventions-after-rewrite.html), где автор проверяет, было ли уже внесено изменение имени таблицы, прежде чем применять соглашение.

public bool Accept(IClassMap target)
{
    //apply this convention if table wasn't specified with WithTable(..) method
    return string.IsNullOrEmpty(target.TableName);
}

Условный интерфейс, который я использую для длины строки, - это iProperty:

public class DefaultStringLengthConvention: IPropertyConvention
{
    public bool Accept(IProperty property) {
        //apply if the string length hasn't been already been specified
        return ??; <------ ??
    }

    public void Apply(IProperty property) {
        property.WithLengthOf(50);
    }
}

Я не вижу, где iProperty предоставляет что-либо, что сообщает мне, было ли свойство уже установлено.Возможно ли это?

ТИА, Беррил

Это было полезно?

Решение 3

Чтобы пояснить в коде, о чем говорят Стюарт и Джейми, вот что работает:

public class UserMap : IAutoMappingOverride<User>
{
    public void Override(AutoMap<User> mapping) {
        ...
        const int emailStringLength = 30;
        mapping.Map(x => x.Email)
            .WithLengthOf(emailStringLength)                        // actually set it
            .SetAttribute("length", emailStringLength.ToString());  // flag it is set
        ...

    }
}

public class DefaultStringLengthConvention: IPropertyConvention
{
    public bool Accept(IProperty property) {
        return true;
    }

    public void Apply(IProperty property) {
        // only for strings
        if (!property.PropertyType.Equals(typeof(string))) return;

        // only if not already set
        if (property.HasAttribute("length")) return;

        property.WithLengthOf(50);
    }
}

Другие советы

.WithLengthOf() добавляет "изменение" (Action<XmlElement>) к списку изменений, которые необходимо применить при создании XML-сопоставления.К сожалению, это поле является private и нет свойства для доступа к списку изменений, поэтому я боюсь, что (в настоящее время) нет способа проверить, была ли у карты свойств WithLengthOf применительно к нему.

До тех пор, пока не появится лучшая альтернатива, вы можете использовать HasAttribute("length").

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top