2

ここ数日、私は EF で遊んでいます。当社のアプリケーションは SQL Anywhere 10 データベースに基づいており、すべてのデータ アクセスはストアド プロシージャを介して行われます。EF は SA 10 でサポートされていないため、SA 11 で EF をテストしています。この目的のために、2 つのテーブルといくつかのストアド プロシージャを含む小さなデータベースを作成しました (asp.net mvc サンプルの nerddinner データベースに基づいています。here ) データベース、テーブル、およびストアド プロシージャからモデルを作成し、必要な関数のインポートを行いました。次の署名を持つストアド プロシージャがあります。

ALTER PROCEDURE "DBA"."get_dinner"( @dinner_id integer)
BEGIN
select dinner_id, title, event_date, description, hosted_by , contact_phone, address, country, latitude, longitude
from dba.dinners d
where d.dinner_id = @dinner_id
END

結果の関数インポート コードは次のようになります。

public global::System.Data.Objects.ObjectResult<dinner> get_dinner(global::System.Data.Objects.ObjectParameter dinner_id)
{
    return base.ExecuteFunction<dinner>("get_dinner", dinner_id);
}

そして、それが問題です。理想的には、生成されたコードは int パラメーターを受け入れる必要があります。 global::System.Data.Objects.ObjectParameter dinner_id 見る限り、edmx ファイルには、パラメーターの型を正しく解釈するために必要なすべてのデータが含まれています。

<Function Name="get_dinner" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="DBA">
  <Parameter Name="dinner_id" Type="int" Mode="InOut" />
</Function>

ここで何か不足していますか?適切なパラメータ型で関数をインポートするには、他に何が必要ですか? これは edmx ファイルを微調整することで修正できるものですか、それとも SA11 EF サポートの実装の問題ですか。

誰かが私にさらなる手がかりを教えてくれることを願っています。

4

1 に答える 1

1

これは、関数インポートの InOut パラメーターとコード生成に関する既知の問題です。

InOut パラメータで次のようなコードを生成することについて話してきました。

public ObjectResults<dinner> get_dinner(ref int dinner_id);

あなたが持っているものではなく。

'InOut' から 'In' パラメータへの変換を試してみてください。コード生成は、次のようなものを生成する必要があります。

public ObjectResults<dinner> get_dinner(int dinner_id);

しかし本当の問題は、あなたがそれを呼び出すとうまくいくかということです?

この背景が役立つことを願っています

乾杯

アレックス

于 2009-06-13T05:45:30.880 に答える