2016-09-10 4 views
0

В базе данных SQL 2014 у меня есть хранимая процедура, которая использует XML в качестве параметра.Использование XML как параметра метода в Codefluent

Я пытаюсь создать метод Codefluent, который будет использовать XML в качестве типа параметра. Параметр определяется:

<cf:parameter typeName="xml" name="XMLcriteria " /> 

Это приводит к процедуре DB, имеющего параметр, определяемый как:

@XMLcriteria [nvarchar] (256) 

вместо ожидаемого:

@XMLcriteria as XML 

Если я попытаться увеличить максимальную размер параметра, я получаю еще более странный результат:

@XMLcriteria [nvarchar] (max) = '' 

Как передать XML в качестве параметров метода, чтобы параметр был определен как XML в хранимой процедуре, созданной производителем SQL?

У меня также возникли проблемы с пониманием того, что делает тип XML CF. Если я создаю свойство объекта CF с типом XML, спецификация выдаст свойство класса типа Строка. Если я присвою этому объекту xElement или xDocument, вся разметка XML удаляется, и я получаю только одну длинную строку значений. В этом случае, когда я использую этот Entity (который должен содержать свойства XML) в качестве параметра в процедуре SQL, я получаю одну длинную строку без выбора элементов.

ответ

1

Для определения параметра XML, вы можете использовать атрибут cfps:dataType="xml":

<cf:parameter typeName="xml" cfps:dataType="xml" name="arg" /> 

Если вам нужно свойство типа XmlElement или XmlDocument, вы можете добавить частичный класс и добавить свойство, которое анализирует значение свойство string.

+0

Спасибо, что указали меня в правильном направлении. Я использовал dbType: XML, который сбрасывался в строку. Это устранило проблему передачи XML-SQL. Однако содержимое параметра все еще требует строки, которую я разрешил с помощью myXMLparameter.toString. Не так бесшовно/чисто, но эффективно. Спасибо за помощь! –

+0

Вы можете попытаться изменить тип параметра на 'XmlElement' в качестве объяснения в [этом сообщении в блоге] (https://blog.codefluententities.com/2015/07/17/table-valued-parameters-use-ienumerable- вместо-оф-ан-массива /). Вы также можете изменить метод «AddParameter» на «AddParameterXml» ([сообщение в блоге] (https://blog.codefluententities.com/2014/08/26/store-int128-in-a-database/)) – meziantou