如果您的数据库支持 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/