2

Entity Framework を使用してラムダ式で使用したい SQL 関数があります。SQL サーバー関数が「fooFunction」であるとします。この関数を EDMX の概念モデルに次のようにマッピングしました。

<Function Name="fooFunction" ReturnType="Edm.String">
   <Parameter Name="param1" Type="Edm.Int32" />
   <Parameter Name="param2" Type="Edm.String" />
   <DefiningExpression>
     dbo.fooFunction(param1, param2)
   </DefiningExpression>
 </Function>

次のように、この関数をコードにマップした静的クラスがあります。

[EdmFunction("Model", "fooFunction")]
   public static string fooFunction(int param1, string param2)
   {
       throw new NotImplementedException("Direct calls are not supported.");
   }

ただし、(コンパイル済みクエリで) このメソッドを呼び出そうとすると、「ストア式に変換できません」というエラーが表示されます。

CompiledQuery.Compile<...> ....  .Where(fooFunction(0,"")=="value")

しばらく首をかしげていましたが、よくわかりません。

誰か助けてくれませんか?ありがとう!

編集: おっと、EdmFunction 属性 (空白) にタイプミスがありました:

[EdmFunction("Model", " fooFunction")]

ただし、「fooFunction を有効な型または関数に解決できません」というエラーが表示されるようになりました。

4

2 に答える 2

2

貢献してくれてありがとう、デニス。ただし、これは問題に対する答えではありません。ストアド プロシージャではなく、UDF を使用したい。

ここで説明されているように、ストレージ モデルに SQL UDF へのマッピングを追加する必要がありました。カスタム ストア関数の使用方法.aspx

コードは、概念モデルのマッピングに似ています。

<Function Name="fooFunc"
  IsComposable="true"
  Schema="dbo"
  Aggregate="false"
  BuiltIn="false"
  ReturnType="nchar">
  <Parameter Name="param1" Type="int" />
  <Parameter Name="param2" Type="nchar" />
</Function>

ReturnType と Parameter Types を少し調整する必要がありました。マップされた UDF のデータ型と一致する必要があることがわかりました。(.NET データ型ではなくネイティブ SQL データ型)

于 2012-05-29T10:00:55.850 に答える
-1

Function(エンティティSQL式で定義)とFunctionImport(名前でデータソースのストアドプロシージャにマップされる)を混同しています。これは、ケースで使用する必要があります。

于 2012-05-29T07:49:18.167 に答える