我的要求是全局配置字符串长度映射,但也可以使用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; }
// ...
}
我的问题是&#34; MaxLength&#34;不能再工作了。在StringLengthConvention.Apply()中应用全局配置之前,是否需要检查属性是否具有MaxLengthAttribute?
答案 0 :(得分:2)
在这种情况下可以使用的是创建一个轻量级约定,指定字符串的MaxLength属性。在这种情况下,约定将为所有字符串设置属性的最大长度,除非它已由注释配置,使用流畅的API或其他约定。
在OnModelCreate方法中添加以下代码以设置默认的MaxLength:
modelBuilder.Properties<string>()
.Configure(c => c.HasMaxLength(DefaultStringLength));
这里有一些常规:http://msdn.microsoft.com/en-us/data/jj819164.aspx 请务必查看页面底部的“更多示例”