Nhibernate - xml 列格式不正确

Nhibernate - xml column not well formed

我有一些 XML 片段,我通过 NHibernate (3.2.0.4000) 存储在 SQL 服务器数据库中。 table 列定义为 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 studio):

<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 没有它也是合式的。

  2. SQL 服务器将 XML 存储为 Unicode (utf-16)。没有其他编码。这就是为什么 SQL 服务器在 XML.

  3. 中存在序言时将其剥离的原因