Domanda

Mi piace lo schema che ho visto in questo post del blog ( http: //marekblotny.blogspot.com/2009/04/conventions-after-rewrite.html ), in cui l'autore sta verificando se è già stata apportata una modifica al nome della tabella prima di applicare una convenzione.

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

L'interfaccia della convenzione che sto usando per una lunghezza della stringa è 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);
    }
}

Non vedo dove IProperty espone nulla che mi dica se la proprietà è già stata impostata. È possibile?

TIA, Berryl

È stato utile?

Soluzione 3

Per chiarire in codice ciò che Stuart e Jamie stanno dicendo, ecco cosa funziona:

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

Altri suggerimenti

.WithLengthOf() aggiunge un " modifica " (Action<XmlElement>) all'elenco delle modifiche da applicare quando viene generata la mappatura XML. Sfortunatamente, quel campo è private e non ci sono proprietà per accedere all'elenco delle modifiche, quindi temo che non ci sia (attualmente) alcun modo per verificare se una mappa di proprietà è stata applicata WithLengthOf ad essa.

Fino a quando non arriva un'alternativa migliore, puoi usare HasAttribute("length").

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top