Dapperバージョン1.12.0.0 XMLパラメータが機能しなくなりました

c# 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, ...)

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

受け入れられた回答

歴史的に、 DbType.Xmlは何かを表現するために内部的にハイジャックされていました。これは問題があります。基本的に、 where Id in @idsパラメータ展開( where Id in @ids )をDynamicParameters 、xmlが壊れてしまいました。

私はこれを表現する別の方法を作成し、更新されたソースをGoogleコードとgithubにプッシュしました。更新されたコードを使用する場合は正常に動作するはずです。私はNuGetをまだ展開していません - あなたがこれを必要とするかどうか教えてください。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ