2013-06-23 5 views
5

У меня есть таблица с полем nvarchar (MS SQL Server 2008 R2). Для тестирования, этот код работает отлично:Unicode with Entity Framework

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

сейчас я создал Entity Framework модель, я поставил 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. Получить Entity Framework Profiler от Nu-получить менеджер пакетов и посмотреть, что запрос отправляет в базу данных.

+0

«Вы уверены, что formData.Get (« description ») возвращает строку UTF-8?» это сформулировано, к сожалению. Все строки в .NET являются Unicode. Лучше будет вопрос, вернет ли он строку, введенную в форму, т. Е. Не будет искажен каким-либо кодированием. – millimoose

+0

@millimoose - да, я имел в виду, что :-). –

+0

уверен, проверено отладчиком –