3

dapper を介して xml 文字列を SQL Server 2008 に渡すと、dapper は xml 文字列内の各文字のパラメーターを作成しているようです。

たとえば、文字列が の場合、<outer></outer>各文字 (「<」、「o」、「u」、「t」など) のパラメーターを作成しているように見えます。

古いバージョンでは、コードは 1 つのパラメーター (つまり、指定された xml パラメーター) をストアド プロシージャに渡します。

設定コードは次のようになります -

var xml = @"
<OuterElement>
  <InnerElement>1</InnerElement>
  <InnerElement>2</InnerElement>
  <InnerElement>3</InnerElement>
  <InnerElement>4</InnerElement>
</OuterElement>";

var parameters = new Dapper.DynamicParameters();
parameters.Add("@XmlParameter", xml, DbType.Xml); 
SqlMapper.Query(
  connection, 
  "dbo.TestXmlInput", 
  parameters, 
  commandType: CommandType.StoredProcedure, 
  commandTimeout: 60
);

私の質問は次のとおりです。他の誰かがこれを再現できますか? もしそうなら、この変更は意図的なものですか、それともバグですか? xml パラメータの受け渡しを実現するための回避策はありますか?

生成された SQL は次のようになります。

exec dbo.TestXmlInput (@XmlParameter1, @XmlParameter2, @XmlParameter3, ...)

どんな助けでも大歓迎です。

4

1 に答える 1

4

歴史的に、DbType.Xml何か違うものを表すために内部的にハイジャックされていました。これが問題になっています。基本的に でパラメータ展開( where Id in @ids)を動作さDynamicParametersせたらxmlが壊れてしまいました。

これを表現する別の方法を作成し、更新されたソースを google-code と github にプッシュしました。更新されたコードを使用すると、正常に動作するはずです。NuGet はまだデプロイしていません。必要な場合はお知らせください。

于 2012-10-16T05:47:01.563 に答える