【问题标题】:Entity Framework 5 not updating row with xml string实体框架 5 不使用 xml 字符串更新行
【发布时间】:2013-09-23 10:54:21
【问题描述】:

我正在尝试使用 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 个字符不会被写入,字符串

Update2:从头开始创建了一个项目,该项目更新了一个表并且遇到了完全相同的问题,所以我知道这也不是“错误的迁移”问题。

【问题讨论】:

    标签: c# xml entity-framework entity-framework-5


    【解决方案1】:

    坦率地说,这是一个令人难以置信的解决方案,以防其他人遇到同样的“问题”。

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

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

    啊。这就是我应该使用 SQL Management Studio 的原因!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      相关资源
      最近更新 更多