我有属性字符串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做些什么?
答案 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/