1

私の要件は、文字列の長さのマッピングをグローバルに構成することですが、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 があるかどうかを確認する必要がありますか?

4

1 に答える 1

2

この状況で機能するのは、文字列の MaxLength プロパティを指定する軽量の規則を作成することです。この状況では、注釈、流暢な API、または別の規則によって既に構成されている場合を除き、すべての文字列のプロパティの最大長が規則によって設定されます。

OnModelCreate メソッドに次のコードを追加して、デフォルトの MaxLength を設定します。

modelBuilder.Properties<string>()
            .Configure(c => c.HasMaxLength(DefaultStringLength));

ここに規則のウォークスルーがあります: http://msdn.microsoft.com/en-us/data/jj819164.aspx ページの下部にある「その他の例」を確認してください。

于 2012-12-19T07:23:48.610 に答える