特にEntity Frameworkで使用するために、SQL Serverでxmlデータ列を使用する方法を理解するのに非常に苦労しています。
基本的に、私たちのテーブルの 1 つは、ユーザーが提供する「カスタム メタデータ」を XML 形式で格納するため、これをテーブルの Xml 列に格納するのが賢明であると思われました。
ただし、このアプリケーションの要件の 1 つは、メタデータの検索をサポートすることです。ユーザーは、XPath クエリ文字列と、XPath の値を比較する値を提供して、クエリに一致するメタデータを含む要素を検索できます。
SQL Server xml 関数がこれに最適であると特定しました (例: [xmlcol].exist('/path1/path2[0][text()=''valuetest'''] ) が、エンティティではサポートされていませんフレームワーク、苛立たしいことに (または具体的には、xml 列はサポートされていません) 別の方法として、ユーザー提供の XPath を xml 関数に渡す UDF を作成しようとしましたが、xml 関数は文字列リテラルしか許可しないことがわかったので、変数を提供できません...
この時点で、私はオプションを使い果たしていました。
IQueryable.ToString() の結果に対して正規表現置換を実行して XPath フィルターを挿入し、この文字列をデータベースに手動で送信する小さなコードを作成しましたが、これにも問題があります。たとえば、結果がナビゲーション プロパティを遅延ロードしていないように見えるためです。
私は探し続け、SQLCLR 型のアイデアに出くわし、XPath 比較を実行する SQLCLR 関数の作成を開始しました。同僚が Azure の SQL Server は SQLCLR をサポートしていないことを指摘するまで、私はこの時点で勝者だと思っていました。
他にどのようなオプションがありますか? 私は空に非常に近づいているようです...