NHibernate搜索条件

时间:2012-12-26 17:09:59

标签: c# nhibernate nhibernate-criteria

我有属性字符串Data的类定义

public class Definition
{
  string Type  {get; set; }
  string Data  { get; set; }
}

然后Data包含一些保存为字符串

的XML
<Definition>
    <Property>
     <Key>DefinitionId</Key>
     <Value>5</Value>
    </Property>   
</Definition>

我需要获得DefinitionId为5的所有Definitons。

最好的办法是什么? 要获得所有定义并解析它们,或者我可以用NHibernate做些什么?

1 个答案:

答案 0 :(得分:1)

如果您的数据库支持Xml查询,您可以使用NHibernate查询Xml类型。 假设您正在使用Sql Server 2005+ ...

第1步 - 课程定义

将您的班级定义更改为:

public class Definition
{
  string Type  {get; set; }
  XDocument Data  { get; set; }
}

您的映射应选择XDocument类型,并为数据库中的Xml列创建适当的Data列类型。

第2步 - 查询

有两种不同的查询方式,但它们归结为同样的事情。下面的代码显示了通过QueryOver api查询:

session.QueryOver<Definition>()
       .Where
        (
            Restrictions.Eq
            (
                Projections.SqlProjection
                (
                   "Data.value('(/Definition/Property/Value)[1]', 'int') as DefinitionId",
                   new string[] { "DefinitionId" },
                   new IType[] { NHibernateUtil.Int32 }
                ),
                5
            )
        )
       .List();

上面的查询使用标准的Sql Server XQuery来查询Xml字段。关于XQuery语言的一点介绍:http://blog.sqlauthority.com/2012/04/27/sql-server-introduction-to-discovering-xml-data-type-methods-a-primer/