私の要件は、文字列の長さのマッピングをグローバルに構成することですが、MaxLengthAttribute を使用してプロパティを特別に構成することもできます。これが私のコードです:
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; }
// ...
}
私の問題は、「MaxLength」が機能しなくなったことです。StringLengthConvention.Apply() でグローバル構成を適用する前に、プロパティに MaxLengthAttribute があるかどうかを確認する必要がありますか?