2009-06-12 17 views
2

私はここ数日間、EFで遊んでいます。 アプリケーションはSQL Anywhere 10データベースに基づいており、すべてのデータアクセスはストアドプロシージャを使用して行われます。 EFはSA 10でサポートされていないため、SA 11でEFをテストしています。 この目的のために、私は2つのテーブルと2つのストアドプロシージャ(asp.net mvcサンプルのnerddinnerデータベースに基づいて、 hereを参照してください) データベース、テーブル、ストアドプロシージャからモデルを作成し、必要な関数インポートを行いました。 は、私は次のシグネチャを持つストアドプロシージャを持っている:エンティティ・フレームワーク+ SQL Anywhere 11 +ストアド・プロシージャ

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); 
} 

そして、それが問題です。理想的には、生成されたコードではなく、私の知る限り見るようにglobal::System.Data.Objects.ObjectParameter dinner_id の、int型のパラメータを受け入れる必要があり、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サポートの実装の問題ですか。

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

答えて

1

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

私たちは、パラメータは、このようなコード生成InOutのことについて話をされています:むしろあなたが持っているものよりも

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

を。

「InOut」から「In」パラメータに変換することを試してみてください。コードジェネレータは、このようなものを生成する必要があります:

public ObjectResults<dinner> get_dinner(int dinner_id); 

本当の質問は、それを呼び出すと機能しますか?

希望は、この背景には、

乾杯

アレックスの答えのための

+0

感謝を助けます。私はedmxファイルを修正し、それが動作するかどうかを調べるつもりです。現時点で生成された関数のインポートが機能しますが、それは私を悩ますパラメータの型だけです。 – Gio2k

+0

それは動作します。うまくいけば、inoutパラメータの問題はすぐに解決されるでしょう。 – Gio2k

関連する問題