Entity Framework 5不能使用XML字符串更新行

3
我正在尝试使用Entity Framework 5的Code First方法将一个包含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个字符不会被写入,<= 43678个字符会被写入。 我仍然不知道这个限制来自哪里。

更新2: 已经从头开始创建了一个项目,用它来更新单个表,并且发现完全相同的问题,因此我知道这也不是“损坏的迁移”问题。

1个回答

3

如果有人遇到同样的“问题”,以下是令人难以置信的解决方案。

数据一直存在。但是在Visual Studio 2012中,如果你使用SQL Server Object Explorer并选择“查看数据”,则对于长度超过43678个字符的nvarchar列,你将无法看到数据(ResponseMsg列为空):

无数据

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

数据

唉。这就是为什么我应该使用SQL Management Studio的原因!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接