我在Entity Framework 6中编写了以下自定义约定:
public class NonUnicodeConvention : Convention
{
public NonUnicodeConvention()
{
this.Properties<string>()
.Configure(property => property.IsUnicode(false));
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configurations
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
// Conventions
modelBuilder.Conventions.Add(new NonUnicodeConvention());
}
当我在不进行任何配置的情况下添加字符串属性时,创建的迁移如下所示:
CreateTable(
"dbo.SomeTable",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name= c.String(unicode: false)
})
.PrimaryKey(t => t.Id);
这正是我想要的......但是,只要我在特定字段上使用HasMaxLength,它就不再使它成为unicode:
Property(p => p.Name).HasMaxLength(128);
CreateTable(
"dbo.SomeTable",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name= c.String(maxLength: 128)
})
.PrimaryKey(t => t.Id);
在这种情况下似乎覆盖了unicode约定。我想要unicode约定,所以我不必在每种情况下都指定它,但每当我使用HasMaxLength时它似乎被覆盖了。我做错了吗?
如果我使用任何其他字符串特定的配置(例如IsFixedLength或IsRequired),它不会改变unicode属性。
答案 0 :(得分:0)
实体框架6.1中已经fixed。
1月23日下午3:52由lukew关闭 已验证设置MaxLength不再在字符串上设置IsUnicode属性。这修复了设置IsUnicode的字符串约定和字符串MaxLength的配置之间的交互。