Frage

Ich mag das Muster, das ich in diesem Blog-Post sah ( http: //marekblotny.blogspot.com/2009/04/conventions-after-rewrite.html ), in dem der Autor zu sehen, ist die Überprüfung, ob ein Tabellenname Änderung ist bereits erfolgt, bevor eine Konvention anzuwenden.

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

Die Konvention Schnittstelle ich bin für eine String-Länge verwendet, ist 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);
    }
}

Ich sehe nicht, wo IProperty etwas macht, das mir sagt, wenn die Eigenschaft bereits festgelegt worden ist. Ist das möglich?

TIA, Berryl

War es hilfreich?

Lösung 3

in Code zu klären, was Stuart und Jamie sagen, hier ist, was funktioniert:

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

Andere Tipps

.WithLengthOf() fügt eine „Änderung“ (Action<XmlElement>) in der Liste der Änderungen anzuwenden, wenn der XML-Mapping erzeugt wird. Leider, das Feld ist private und es gibt keine Eigenschaft, um die Änderung Liste zuzugreifen, so dass ich fürchte, es ist (derzeit) keine Möglichkeit, wenn eine Eigenschaft Karte WithLengthOf an sie angelegt hat zu überprüfen.

Bis eine bessere Alternative entlang kommt, können Sie HasAttribute("length") verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top