DB が 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/