1

プロパティ文字列 Data を持つクラス Definition があります

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 で何かできますか?

4

1 に答える 1

1

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/

于 2012-12-27T02:32:55.080 に答える