Nhibernate - xml 列格式不正确
Posted
技术标签:
【中文标题】Nhibernate - xml 列格式不正确【英文标题】:Nhibernate - xml column not well formed 【发布时间】:2020-05-02 08:35:12 【问题描述】:我有一些通过 NHibernate (3.2.0.4000) 存储在 SQL Server 数据库中的 XML sn-ps。表列定义为 XML。 XML 的存储和更新工作正常,但在数据库中我缺少第一个带有编码和版本信息的节点。
C# 对象,内部 XML:
<?xml version="1.0" encoding="utf-16"?>
<RsSn>
<Layermapping xmlns="someNamespace">
<Layer layerName="0" layerDescription="5876548" />
<Layer layerName="1" layerDescription="5876549" />
</Layermapping>
</RsSn>
插入数据时的 SQL Server Profiler:
declare @p6 xml
set @p6=convert(xml,
N'<RsSn><Layermapping xmlns="someNamespace">
<Layer layerName="0" layerDescription="5876548"/>
<Layer layerName="1" layerDescription="5876549"/>
</Layermapping>
</RsSn>'
)
<?xml version="1.0" encoding="utf-16"?>
元素丢失!
SQL 服务器列的内容(通过 SSMS 工作室):
<RsSn>
<Layermapping xmlns="someNamespace">
<Layer layerName="0" layerDescription="5876548" />
<Layer layerName="1" layerDescription="5876549" />
</Layermapping>
</RsSn>
NHibernate 配置(映射文件的一部分)
<class name="SnippetEntity" table="tblSnippet">
<id name="SnippetPK" column="SnippetPK" type="Int64">
<generator class="native" />
</id>
<property name="ResourceData" column="ResourceData" type="NHibernate.Type.XmlDocType"/>
</class>
我不允许更新 NHibernate 程序集。
这是我在映射文件中使用的正确类型吗?
我是否必须使用其他配置才能将文档“格式正确”存储在数据库中?
【问题讨论】:
【参考方案1】:顶部的<?xml version="1.0" encoding="utf-16"?>
构造称为XML prolog。拥有它不是强制性的。没有它,XML 格式良好。
SQL Server 将 XML 存储为 Unicode (utf-16)。没有其他编码。这就是 SQL Server 在 XML 中存在 prolog 时将其剥离的原因。
【讨论】:
以上是关于Nhibernate - xml 列格式不正确的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate - 无法执行查询 - 输入字符串的格式不正确