2013-09-23 3 views
3

Я пытаюсь сохранить строку (68kb в размере), содержащую xml-код, закодированный в utf-8, в SQL Server 2012 с использованием Entity Framework 5. Я использую подход, основанный на кодах.Entity Framework 5 не обновляет строку с помощью строки xml

Однако для некоторых из моих строк xml (но не для всех) он сохраняет пустую строку и ни один из xml вообще. Использование контрольных точек подтверждает, что данные назначаются до вызова SaveChanges().

Вот метод я использую для обновления конкретной строки в базе данных:

public void LogResponseMessage(MessageBase msg, DebugLog debugLog) 
    { 
     // Serialize the message using a helper class 
     string XMLMsg = SerializationHelper.XMLSerializeObject(msg, m_SerializationTypes, true); 

     debugLog.DtTmResponseLogged = DateTime.Now; 
     debugLog.ResponseMsg = XMLMsg; 

     using (var db = new LoggerContext()) 
     { 
      db.DebugLogs.Attach(debugLog); 
      var Entry = db.Entry(debugLog); 
      // Flag the updated columns as having been modified 
      Entry.Property(x => x.DtTmResponseLogged).IsModified = true; 
      Entry.Property(x => x.ResponseMsg).IsModified = true; 
      db.SaveChanges(); 
     } 
    } 

debugLog.ResponseMsg является столбцом У меня возникли проблемы с. DebugLog - класс, который содержит определения столбцов. ResponseMsg получает назначенный XML-сериализованный .NET-объект, который я хочу сохранить. Я помещаю столбцы как измененные, но для некоторых строк он просто сохраняет пустую строку. Никакие исключения не выбрасываются EF, и я могу просмотреть XML-сидение в debugLog.ResponseMsg с использованием отладчика. Свойство string ResponseMsg имеет набор атрибутов [MaxLength], а столбец создается в SQL Server как nvarchar(max).

Мои первоначальные мысли - это какая-то проблема с кодировкой или размером, но я не уверен в этом - может ли кто-нибудь пролить свет на это?

Обновление: Это проблема с длиной строки. Строки> 43678 символов не записываются, строки < = 43678 действительно записываются. Я все еще не понимаю, откуда этот предел.

Update2: Создал проект с нуля, который обновляет одну таблицу, и я вижу точно такую ​​же проблему, поэтому я знаю, что это тоже не проблема с искаженным переносом.

ответ

3

И вот, совершенно откровенно, недоверчивое решение в случае, если кто-то еще сталкивается с одной и той же «проблемой».

Данные были там все время. Но если в Visual Studio 2012 вы используете Обозреватель объектов SQL Server и выбираете «просмотр данных», для столбцов nvarchar с более чем 43678 символами в длину вы не видите данные (столбец ResponseMsg выглядит пустым):

No Data

Но если вы пишете вы владеете T-SQL запрос, то вы увидите данные в панели результатов:

Data

ARGH. И именно поэтому я должен использовать SQL Management Studio!

Смежные вопросы