Entity Framework 5 を使用して、utf-8 でエンコードされた xml を含む文字列 (サイズが 68kb) を SQL Server 2012 に保存しようとしています。コードファーストのアプローチを使用しています。
ただし、一部の 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オブジェクトが割り当てられます。列に変更済みのフラグを立てていますが、一部の特定の文字列については、空の文字列を保存するだけです。debugLog.ResponseMsg
EF によって例外がスローされることはなく、デバッガーを使用してXML を表示できます。文字列プロパティResponseMsg
には[MaxLength]
属性セットがあり、列は SQL Server で として作成されますnvarchar(max)
。
私の最初の考えは、それはある種のエンコーディングまたはサイズの問題ですが、どちらについてもあまり進歩していません-誰かがこれに光を当てることができますか?
更新:文字列の長さの問題のようです。文字列 > 43678 文字は書き込まれませんが、文字列 <= 43678 は書き込まれます。この制限がどこから来ているのか、私はまだ途方に暮れています。
Update2 : 単一のテーブルを更新するプロジェクトを最初から作成し、まったく同じ問題が発生しているため、「破損した移行」の問題でもないことがわかっています。