在具有非unicode约定的字符串上使用HasMaxLength不起作用

时间:2013-10-25 21:27:36

标签: c# entity-framework ef-migrations entity-framework-6

我在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属性。

1 个答案:

答案 0 :(得分:0)

实体框架6.1中已经fixed

  

1月23日下午3:52由lukew关闭   已验证设置MaxLength不再在字符串上设置IsUnicode属性。这修复了设置IsUnicode的字符串约定和字符串MaxLength的配置之间的交互。