【问题标题】:Nhibernate - xml column not well formedNhibernate - xml 列格式不正确
【发布时间】: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 程序集。

  • 这是我在映射文件中使用的正确类型吗?

  • 我是否必须使用其他配置才能将文档“格式正确”存储在数据库中?

【问题讨论】:

    标签: c# .net sql-server xml nhibernate


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

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

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多