Nhibernate - xml столбец плохо сформирован - PullRequest
1 голос
/ 15 января 2020

У меня есть несколько XML фрагментов, которые я храню через NHibernate (3.2.0.4000) в SQL Серверной базе данных. Столбец таблицы определен как 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 Профилировщик сервера при вставке данных:

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 Ответ

3 голосов
/ 15 января 2020
  1. Верхняя конструкция <?xml version="1.0" encoding="utf-16"?> называется прологом XML. Это не обязательно иметь это. XML хорошо сформирован без него.

  2. SQL Сервер сохраняет XML как Unicode (utf-16). Нет другой кодировки. Вот почему SQL Сервер удаляет пролог, если он существует в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...