NHibernate存储过程与XML参数

时间:2012-12-10 12:54:09

标签: xml nhibernate

我想我会在这个问题上疯狂:这是一个相当简单的场景,应该记录在案,但是......不!

这是我的存储过程声明:

CREATE PROCEDURE [dbo].[spImport]
(
    @xmlDocument AS XML
)
AS
---
GO

这是我的映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="XXX"
                   namespace="XXX.Entities">
    <sql-query name="spImport">
        <![CDATA[EXEC [dbo].[spImport] @xmlDocument = :xmlDocument]]>
    </sql-query>
</hibernate-mapping>

这是调用方法:

session.GetNamedQuery("spImport").SetParameter("xmlDocument", document, NHibernateUtil.XmlDoc).ExecuteUpdate();

现在,我收到了以下错误:

  

准备EXEC [dbo]。[spImport] @xmlDocument   = @ p0发生错误InnerException:SqlCommand.Prepare方法要求所有变量长度参数都有明确设置   非零尺寸。

感谢您的帮助, 斯蒂芬

1 个答案:

答案 0 :(得分:1)

从未花时间真正解决XmlType长度问题。会对“干净”的答案感兴趣。无论如何,这是我的解决方法:

我假设你使用的是NHibernateUtil.XmlDoc:IUserType。

作为SqlTypes实现,我有:

    public SqlType[] SqlTypes
    {
        get 
        {
            return new SqlType[] { new SqlXmlType() };
        }
    } 

其中SqlXmlType为:

  public class SqlXmlType : SqlType
    {
        public SqlXmlType() : base(System.Data.DbType.Xml,5000000)
        {
        }

    }

允许我处理最多5个Mo XmlDocs

希望这会有所帮助