4

問題があります。おそらくあなたの専門家の一人がここで助けることができます。クエリしているテーブルには2つのxml列があります。これらの列のxmlデータに対してもクエリを実行する必要があります(高度な検索機能で)。問題は、Entity Frameworkを使用していますが、それをサポートしていないことです。「ObjectQuery.Execute」を実行しようとしても、構文エラーが発生します。それで、ここでの私のオプションは何ですか?

  1. テーブルを変更し、クエリが必要なXMLのデータの列を追加して、Entity Frameworkを使用して操作を実行できるようにしますか?
  2. 高度な検索の場合は、ODBCを使用し、SQLXmlを使用できる場所で通常のクエリを実行しますか?ここでの潜在的な脅威は何ですか[複数の接続、接続が多すぎる、設計/アーキテクトの忌まわしさなど]?
  3. または、誰かがこれに対するより良い解決策を提案できますか?

ありがとう、

アリ・ナヒド

4

1 に答える 1

2

EF は、SQL Server XML 型の列を文字列にマップします。したがって、この定義の場合:

CREATE TABLE [dbo].[XmlData](
[ID] [int] IDENTITY(1,1) NOT NULL,
[XmlTestColumn] [xml] NOT NULL
)

次のエンティティがあります。

public partial class XmlData
{
    public int ID { get; set; }
    public string XmlTestColumn { get; set; }
}

文字列をXmlDocumentなどにロードできます。これは1つのアプローチです。

SQL Server に対してネイティブ XML クエリを発行する場合は、次のことを行う必要があります。

  1. 適切なエンティティ タイプを定義または選択します。
  2. XML クエリで使用Database.SqlQueryします。

    var query = context.Database.SqlQuery(@"SELECT it.Id, it.Name, it.SomeData, t2.someotherdata FROM Table1 as it CROSS APPLY ...");

ObjectQuery概念モデルに反して動作し、ネイティブ クエリをサポートしません。

于 2012-11-26T02:22:06.187 に答える