我試圖保存一個字符串(68kb大小)包含utf-8編碼xml到SQL Server 2012使用實體框架5.我使用代碼優先的方法。實體框架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不會引發異常,我可以使用調試器查看debugLog.ResponseMsg
中的XML。字符串屬性ResponseMsg
具有[MaxLength]
屬性集,並且該列在SQL Server中被創建爲nvarchar(max)
。
我最初的想法是它是某種編碼或尺寸問題,但我沒有取得任何進展 - 任何人都可以對此有所瞭解?
更新:它似乎是一個字符串長度問題。字符串> 43678個字符沒有被寫入,字符串< = 43678被寫入。至於這個限制來自哪裏,我仍然處於虧損狀態。
UPDATE2:已經創建了一個從無到有的項目,更新單個表,我看到完全一樣的問題,所以我知道這是不是一個「錯位移民」問題,無論是。