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 回答