2013-06-23 220 views
5

我有一个带有nvarchar字段(MS SQL Server 2008 R2)的表。现在Unicode与实体框架

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

我创建实体框架模型,我已经设置Unicode作为真

enter image description here

然后我尝试更新我的纪录:为了进行测试,此代码工作正常

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。

+1

问题出在数据库端 - 而不是EF端? –

+0

正如我写的,更新[屏幕截图] set name =N'Значение'其中id = 230246正常工作。我可以肯定,这个问题不在数据库端? –

回答

3
  1. 你确定formData.Get("description")返回UTF-8字符串(它没有被转换的地方)吗?

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

  3. 从获取实体框架事件探查器的Nu-得到包管理器,看看哪些查询发送到数据库。

+0

“你确定formData.Get(”description“)返回UTF-8字符串吗?”这是不幸的措辞。 .NET中的所有字符串都是Unicode。一个更好的问题是如果它返回输入到表单中的字符串,即没有被编码的​​某处损坏。 – millimoose

+0

@millimoose - 是的,我的意思是:-)。 –

+0

当然,由调试器 –