LINQ to Entitiesを使用して戻り値でOracle関数を呼び出す方法は?

entity-framework linq-to-entities oracle11g
LINQ to Entitiesを使用して戻り値でOracle関数を呼び出す方法は?

Oracle 11gデータベースのデータにアクセスするアプリケーションで作業しています。 EF4を使用しており、LINQを使用してデータにアクセスします。 パッケージに保存されている関数を呼び出す必要があるシナリオに遭遇しました。 この関数には戻り値もあります。 この関数をエンティティデータモデルに追加しましたが、「関数インポートの追加」を実行できません。 したがって、LINQを使用してアクセスすることはできません。 この関数を呼び出して戻り値を取得するにはどうすればよいですか?

しばらく前にこの質問をしましたが、まだ回答がありません。 とにかく、他の人が問題を理解して正しい方向に導くのに便利になるように、いくつかの詳細で更新しています。 私はこのhttps://stackoverflow.com/questions/3928748/how-can-i-execute-an-oracle-function-from-within-a-linq-expression-in-entity-で提案されているソリューションを実装しようとしましたfram [question]、例外が発生しています。

エンティティデータモデルのdesigner.csファイルに次を追加しました。

   [EdmFunction("TestModel.Store", "TestFunction")]
    public int TestFunction(decimal ALNR, decimal ATID, decimal AUKENR)
    {
        throw new ApplicationException();
    }

edmxファイルの一部を次に示します。

この関数を呼び出す方法は次のとおりです。

var selectQuery = from T in _context.Table1
                  join A in _context.Table2 on T.columnA equals A.columnB
                  join TU in _context.Table3 on T.columnC equals TU.columnD
                  where T.columnD == 5 && T.columnE == someVariable
                  select new someType
                  {
                      propertyA = A.columnG,
                      propertyB = _context.TestFunction(T.columnE, A.columnF, TU.columnH)
                  };

しかし、次のいずれかを行う場合:

ObservableCollection weekTotaldata = new ObservableCollection(selectQuery);  //Exception thrown at runtime

or

foreach (var ttu in selectQuery) //Exception thrown at runtime
{
    double testval = ttu.propertyB;
}

その関数「ApplicationException」でスローされる例外を取得します。 この関数がL2Eクエリの例外以外の場所で呼び出された場合、この例外はスローされませんか?

何がおかしいのですか? Linq-To-EntitiesからOracle関数を呼び出すにはどうすればよいですか? 呼び出そうとしている関数は、組み込みOracle関数ではなく、ユーザー定義関数であることに注意してください。

  5  1


ベストアンサー

私がOracleを使用してEF4で作業している限り、関数のインポートはここでは機能していないようです。 数か月前に同じ問題に直面し、関数をインポートするために多くの方法を試しましたが、運はありませんでした。 しかし、検索中にOTNに*(Oracle Stored Functionsはサポートされていません)*と記載されたリンクが見つかりました。 EF4は、oracle関数を呼び出すオプションをまだ提供していません。 ストアドプロシージャを使用している場合でも、refカーソルを返すストアドプロシージャを選択する必要があります。 サポートされるストアドプロシージャには、戻り値を持たないプロシージャとパッケージメソッドが含まれますが、OUTまたはIN OUTパラメータが含まれる場合があります。

ただし、SQLサーバーを使用している場合は、EF4でユーザー定義関数のインポートを実行する方法がいくつかあります。 役立つリンクを次に示します。

4


タイトルとURLをコピーしました