1

我有属性字符串数据的类定义

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

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

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

我需要获取所有定义 ID 为 5 的定义。

最好的方法是什么?获取所有定义并解析它们,或者我可以用 NHibernate 做点什么?

4

1 回答 1

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/

于 2012-12-27T02:32:55.080 回答