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>'
    )

&lt;?xml version="1.0" encoding="utf-16"?&gt; 元素丢失!

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】:

    顶部的&lt;?xml version="1.0" encoding="utf-16"?&gt; 构造称为XML prolog。拥有它不是强制性的。没有它,XML 格式良好。

    SQL Server 将 XML 存储为 Unicode (utf-16)。没有其他编码。这就是 SQL Server 在 XML 中存在 prolog 时将其剥离的原因。

【讨论】:

以上是关于Nhibernate - xml 列格式不正确的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 2.1.2 - 如何禁用反射优化器

如何让 Nhibernate 重建数据库?

NHibernate - 无法执行查询 - 输入字符串的格式不正确

NHibernate 和 Oracle Lite

在使用 NHibernate 进行持久性的项目中测试数据模型

NHibernate Definitive Cascade 应用指南