NHibernate SQL查询XML结果以字符串形式出现

时间:2011-12-06 16:23:36

标签: xml nhibernate stored-procedures

我有以下方法:

    public XmlElement FullSetXML(Guid ReviewUID)
    {
        using (ISession session = sessionManager.OpenSession())
        {
            IQuery query = session.CreateSQLQuery("exec rcs.ReviewFullSetXML ?");
            query.SetGuid(0, ReviewUID);
            return (XmlElement)query.UniqueResult();
        }
    }

存储过程返回XML,但它在此处作为字符串传递。结果是我收到以下错误:

Unable to cast object of type 'System.String' to type 'System.Xml.XmlElement'

任何人都可以告诉我我在这里缺少什么来让它作为XMLElement返回?

1 个答案:

答案 0 :(得分:0)

如果你的存储过程返回一个xml-string,这样的东西会有所帮助:

public XmlDocument FullSetXML(Guid ReviewUID)
{
    using (ISession session = sessionManager.OpenSession())
    {
        IQuery query = session.CreateSQLQuery("exec rcs.ReviewFullSetXML ?");
        query.SetGuid(0, ReviewUID);
        var xmlString = query.UniqueResult().ToString();

        var xmlDoc = XmlDocument();
        doc.LoadXml(xmlString);
        return doc;
    }
}

否则,如果您需要加载SQL Server XML数据类型,请查看here 在这种情况下,您必须使用SqlCommandSqlDatareader而不使用NHibernate对象:只需从会话中获取连接引用。连接(您必须执行转换为SqlConnection)。

如果你需要映射一个字段(顺便说一下你似乎不是这样),看看here
如果您可以在&#34; SqlQuery&#34;中使用自定义IUserType,我从未尝试过。使用UniqueResult<..>():这可能值得一试......