【问题标题】:Unicode with Entity Framework带有实体框架的 Unicode
【发布时间】:2013-06-23 08:21:38
【问题描述】:

我有一个带有 nvarchar 字段的表(MS SQL Server 2008 R2)。对于测试,这段代码可以正常工作:

Update [Screenshots] set name=N'Значение' where id=230246

现在我创建了实体框架模型,我将 Unicode 设置为 True

然后我尝试更新我的记录:

    public void Put(FormDataCollection formData)
    {
        string filename = formData.Get("filename");
        var screenshot = c.Screenshots.Where(p => p.filename == filename).FirstOrDefault();
        if (screenshot != null)
        {
            screenshot.name = formData.Get("description");
            c.SaveChanges();
        }
    }

但我得到了“??????”而不是 unicode 值。怎么做?我知道 AsNonUnicode 方法,但此方法仅适用于 LINQ。

【问题讨论】:

  • 问题可能出在数据库端 - 而不是 EF 端?
  • 正如我所写,更新 [Screenshots] set name=N'Значение' where id=230246 工作正常。我可以确定,这个问题不在数据库端吗?

标签: entity-framework unicode


【解决方案1】:
  1. 您确定 formData.Get("description") 返回 UTF-8 字符串(它没有在某处转换)吗?

  2. 您在实体框架中的方法是什么?代码优先/设计优先/数据库优先?
    尝试删除数据库并重新创建 - 删除数据库,然后在设计器中右键单击 -> Generate database from model...

  3. 从 Nu-get 包管理器获取 Entity Framework Profiler 并查看发送到数据库的查询。

【讨论】:

  • "您确定 formData.Get("description") 返回 UTF-8 字符串吗?"不幸的是,这是措辞。 .NET 中的所有字符串都是 Unicode。一个更好的问题是它是否返回输入到表单中的字符串,即没有被某处编码破坏。
  • @millimoose - 是的,我的意思是:-)。
  • 重新创建的模型,它现在可以工作了!看来,英孚有“水下石头”。谢谢!
  • 没问题 ;-),在 EF 设计器更改后,您应该始终重新创建数据库 :)。
猜你喜欢
  • 2015-12-26
  • 2011-08-08
  • 2014-03-24
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2012-09-24
  • 2017-04-01
相关资源
最近更新 更多