2013-06-23 196 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

當然,由調試器 –