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

本文关键字:HasMaxLength 不起作用 字符串 unicode 约定 | 更新日期: 2023-09-27 18:36:59

我在实体框架 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属性。

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

这已在实体框架 6.1 中修复。

1 月 23 日下午 3:52 关闭 by lukew 已验证设置最大长度是否不再设置字符串上的 IsUnicode 属性。这修复了设置 IsUnicode 的字符串约定与字符串 MaxLength 的配置之间的交互。