Я пытаюсь сохранить строку (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: Создал проект с нуля, который обновляет одну таблицу, и я вижу точно такую же проблему, поэтому я знаю, что это тоже не проблема с искаженным переносом.