2012-12-26 47 views
1

我有类定义与属性字符串数据NHibernate的搜索条件

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

然后数据包含一些XML是保存为字符串

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

我需要让所有的地方。定义是DefinitionId 5

做什么最好的方法是什么? 要获得所有的定义和解析他们或我可以做一些与NHibernate的?

回答

1

如果您的数据库支持Xml查询,您可以使用NHibernate查询Xml类型。 假设你使用SQL Server 2005+的工作...

第1步 - 类定义

更改您的类定义:

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

你的映射应该选择的XDocument键入并为数据库中的Data列创建合适的Xml列类型。

第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/

+1

此外,还有session.CreateSqlQuery()提交adhoc SQL查询,但有NHibernate从返回的数据生成对象。 –