Meine Anforderung konfiguriert die Zeichenfolgenlängenzuordnung global, kann jedoch MaxLengthAttribute auch verwenden, um eine Eigenschaft speziell zu konfigurieren. Hier ist mein Code:
public class StringLengthConvention
: IConfigurationConvention<PropertyInfo, StringPropertyConfiguration>
{
public void Apply(
PropertyInfo propertyInfo,
Func<StringPropertyConfiguration> configuration)
{
StringAttribute[] stringAttributes = (StringAttribute[])propertyInfo.GetCustomAttributes(typeof(StringAttribute),true);
if (stringAttributes.Length > 0)
{
configuration().MaxLength = stringAttributes [0].MaxLength;
}
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add<StringLengthConvention>();
}
public class ContentInfo
{
// ...
[MaxLength(200)]
[String]
public string TitleIntact { get; set; }
// ...
}
Mein Problem ist, dass "MaxLength" nicht mehr funktioniert. Muss ich prüfen, ob die Eigenschaft ein MaxLengthAttribute hat, bevor ich die globale Konfiguration in StringLengthConvention.Apply () anwende?
In dieser Situation würde eine leichtgewichtige Konvention erstellt, die die MaxLength-Eigenschaft für Zeichenfolgen angibt. In dieser Situation würde die Konvention die maximale Länge der Eigenschaft für alle Zeichenfolgen festlegen, außer dort, wo sie bereits durch eine Anmerkung, mit der fließenden API oder durch eine andere Konvention konfiguriert wurde.
Fügen Sie in Ihrer OnModelCreate-Methode den folgenden Code hinzu, um Ihre Standard MaxLength festzulegen:
modelBuilder.Properties<string>()
.Configure(c => c.HasMaxLength(DefaultStringLength));
Es gibt einen Spaziergang von Konventionen hier: http://msdn.microsoft.com/en-us/data/jj819164.aspx Stellen Sie sicher, einen Blick auf die "Weitere Beispiele" am unteren Rand der Seite