C# 实体框架5未使用xml字符串更新行

C# 实体框架5未使用xml字符串更新行,c#,xml,entity-framework,entity-framework-5,C#,Xml,Entity Framework,Entity Framework 5,我正在尝试使用Entity Framework 5将包含utf-8编码xml的字符串(大小为68kb)保存到SQL Server 2012中。我使用的是代码优先的方法 但是,对于我的一些xml字符串(但不是全部),它会保存一个空字符串,而不会保存任何xml。使用断点确认在调用SaveChanges()之前已分配数据 下面是我用来更新数据库中特定行的方法: public void LogResponseMessage(MessageBase msg, DebugLog debugLog)

我正在尝试使用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对象,然后我想保存它。我将列标记为已修改,但对于某些特定字符串,它只保存一个空字符串。EF不会引发异常,我可以使用调试器查看位于
debugLog.ResponseMsg
中的XML。字符串属性
ResponseMsg
设置了
[MaxLength]
属性,并且该列在SQL Server中被创建为
nvarchar(max)

我最初的想法是,这是某种编码或大小问题,但我在这两方面都没有取得多大进展——有人能解释一下吗


更新:这似乎是一个字符串长度问题。字符串>43678个字符无法写入,字符串,坦白说,这是一个令人难以置信的解决方案,以防其他人遇到同样的“问题”

数据一直在那里。但是,如果在Visual Studio 2012中使用SQL Server对象资源管理器并选择“查看数据”,则对于长度超过43678个字符的nvarchar列,您将看不到数据(ResponseMsg列看起来为空):

但如果您编写自己的T-SQL查询,则会在结果窗格中看到数据:

啊。这就是为什么我应该使用SQLManagementStudio