实体框架5不使用xml字符串更新行
作者:互联网
我正在尝试使用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