带有XML参数的NHibernate存储过程

带有XML参数的NHibernate存储过程,xml,nhibernate,Xml,Nhibernate,我想我在这一点上疯了:这是一个相当简单的场景,应该记录下来,但是。。。不 以下是我的存储过程声明: CREATE PROCEDURE [dbo].[spImport] ( @xmlDocument AS XML ) AS --- GO 以下是我的映射: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XXX" namespac

我想我在这一点上疯了:这是一个相当简单的场景,应该记录下来,但是。。。不

以下是我的存储过程声明:

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>
现在,我得到了福林错误:

在准备EXEC[dbo].[spImport]@xmlDocument时 =@p0在InnerException:SqlCommand中发生错误。Prepare方法要求显式设置所有可变长度参数 非零大小

谢谢你的帮助,
Stefan从未花时间真正解决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


希望这会有所帮助

嗨,这太好了,谢谢。不过,和你一样,我也非常希望有一个干净的解决方案!
  public class SqlXmlType : SqlType
    {
        public SqlXmlType() : base(System.Data.DbType.Xml,5000000)
        {
        }

    }