【问题标题】:Entity Framework 6 code first: setting unicode to false for string propertiesEntity Framework 6 代码优先:将字符串属性的 unicode 设置为 false
【发布时间】:2014-04-02 22:07:24
【问题描述】:

在我的模型中,我有一些用 StringLength 属性装饰的实体:

[StringLength(128)]    
public string FirstName { get; set; }

我也以这种方式禁用了所有字符串属性的 unicode:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Properties<string>().Configure(p => p.IsUnicode(false));            
}

问题是所有用上述属性修饰的字符串属性在生成数据库模式时都会忽略此设置,从而为相应的数据库列生成 nvarchar 数据类型。 在这种情况下禁用 unicode 的正确方法是什么?

【问题讨论】:

  • 我看到了同样的事情。可能是新的PropertyConventionConfiguration API 中的一个错误。
  • 谢谢@GertArnold,有什么解决方法吗?

标签: entity-framework ef-code-first


【解决方案1】:

似乎是新的PropertyConventionConfiguration API 中的一个错误(或遗漏)。以下配置确实有效,因此可以作为一种解决方法:

modelBuilder.Properties<string>().Configure(x => x.HasColumnType("VARCHAR"));

【讨论】:

  • 查看问题。已在 6.1.0 中修复(目前处于测试阶段)。
  • 您的解决方案运行良好,但来自 MSDN 的文件显示他的方法是首选方案。这是一个错误?解决了吗?
  • 这不是 Bug,在某些 Unicode 语言中 [StringLength(128)] 需要超过 128 个字节,因此模型创建了具有 nvarchar 数据类型的列。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2016-08-06
相关资源
最近更新 更多