1

私は EF4、dotnet 4 を使用しています。xml 列 (SQLServer 2008R2) から xml 値を取得するのに役立つ edmx 関数を作成したいと考えています。私の質問は基本的にEntity Framework Query Xmlに投稿されたものと同じです

私は自分の C# ファイルに次のような関数を作成することから始めました。

    [System.Data.Objects.DataClasses.EdmFunction("ModelNamespace", "String_XmlField")]
    public static String XmlField(this String data, String path)
    {
        throw new Exception("Not implemented");
    }

次の部分は、私の edmx (正しい csdl スキーマ) に入りました。

    <Function Name="String_XmlField" ReturnType="Edm.String">
      <Parameter Name="data" Type="Edm.String" />
      <Parameter Name="path" Type="Edm.String" />
      <DefiningExpression>
        data.value(path, "nvarchar(max)")
      </DefiningExpression>
    </Function>

そして、私はそれを次のように使用しようとしています:

source = source.Where(x => x.NewData.XmlField("(//IDPat/node())[1]") == "3152");

私が得ているエラーは次のとおりです:「関数 'ModelNamespace.String_XmlField' の定義の準備中にエラーが発生しました。詳細については、内部例外を参照してください。 Edm.String' が現在読み込まれているスキーマにあります。単純な識別子の近く、2 行目、18 列目。"

元の応答に欠落している edmx 部分にエラーがあると確信していますが、問題を見つけることができません。

4

1 に答える 1

0

CSDLにT-SQLコマンドを入れたようです。CSDL でデータベースが抽象化され、EF はバックエンドが何であるかを「認識」しません (気にしません)。DefiningExpression は Entity SQL ( http://msdn.microsoft.com/en-us/library/bb387145.aspx ) の式であり、データベース固有の SQL の方言ではありません。このレベルでは、文字列型は、関数の .value プロパティを持たない EDM 型システム (Edm.String として示される) からの型です。(実際には、プロパティや機能はありません)。データベースが使用している Sql の方言を使用して定義された特定の関数を格納する必要がある場合は、SSDL Function 要素に格納する必要があります - http://msdn.microsoft.com/en-us/library/dd283136(v=VS.90 )

于 2012-10-05T19:23:12.197 に答える