2012-10-15 40 views
2

當通過dapper將xml字符串傳遞到SQL Server 2008時,dapper似乎正在爲xml字符串中的每個字符創建一個參數。Dapper版本1.12.0.0 XML參數不再起作用

例如,如果該字符串是<outer></outer>這似乎是建立一個參數 爲每個字符( '<', 'O', 'U', 'T' 等。)

在老版本的代碼會傳遞一個參數(即指定的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, ...) 

任何幫助將不勝感激。

回答

3

歷史上,DbType.Xml已被內部劫持代表不同的東西。這是有問題的。基本上,當我參數擴展(where Id in @ids)在DynamicParameters工作,它打破了XML。

我現在已經創建了一種不同的表示方式,並將更新後的源代碼推送到谷歌代碼和github。如果你使用更新後的代碼,它應該可以正常工作。我還沒有部署NuGet - 讓我知道你是否需要這個。

+0

完美的作品,謝謝。 – NKeddie

+2

是否已將更改部署到nu? – TGS