ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实体框架5不使用xml字符串更新行

2019-11-22 19:06:03  阅读:165  来源: 互联网

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


我正在尝试使用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个字符,而写入字符串< = 43678.我仍然对这个限制的来源不知所措. Update2:已经从头开始创建了一个项目,该项目更新了一个表并看到了完全相同的问题,因此我知道这也不是“复杂的迁移”问题.

解决方法:

坦率地说,这是万一其他人遇到相同“问题”的不可思议的解决方案.

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

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

啊这就是为什么我应该使用SQL Management Studio!

标签:entity-framework-5,xml,c,entity-framework
来源: https://codeday.me/bug/20191122/2062042.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有