在具有非 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属性。
这已在实体框架 6.1 中修复。
1 月 23 日下午 3:52 关闭 by lukew 已验证设置最大长度是否不再设置字符串上的 IsUnicode 属性。这修复了设置 IsUnicode 的字符串约定与字符串 MaxLength 的配置之间的交互。