0

私は今2ヶ月間この問題を抱えています

RIA でストアド プロシージャを使用するにはどうすればよいですか。

私はLinqToSqlを使用していましたが、すべてうまくいきました。

デザイナーでクラスを作成し、それを SP にマップしました。

今EFで、このComplexTypesを見たので、息子SPをインポートしてComplexTypesになりました。

しかし、DomainDataSource には表示されません。

わかった。

しかし、どうすればそれらを使用できますか?

一部のデータを取得するだけで済みます。

すべてのソリューション (List、IList など) を試しましたが、

タイプ 'System.Data.Metadata.Edm.ComplexType' のオブジェクトをタイプ 'System.Data.Metadata.Edm.EntityType' にキャストできません。ビジネスアプリケーション2

解決策はありますか?

4

2 に答える 2

1

ストアド プロシージャの問題は、RIA サービス ツールが、ストアド プロシージャが返す列を「認識」できないことです。

したがって、他の方法では生成されるはずの多くのコードが欠落しています。

あなたが探している答えではありませんが、解決策はストアドプロシージャを使用しないことです。

于 2009-11-28T10:41:56.883 に答える
0

このサイトで次の優れたステップバイステップガイドを見つけました -

http://betaforums.silverlight.net/forums/p/218383/521023.aspx

1) ADO Entity Data Model を Web プロジェクトに追加します。データベースから生成するオプションを選択します。接続するデータベース インスタンスを選択します。

2) モデルにインポートする DB オブジェクトを選択します。テーブル ノードを展開して、モデルにインポートする任意のテーブルを選択できます。Stored Procedure ノードを展開して、Stored Precedure も選択します。[完了] をクリックしてインポートを終了します。

3) DB モデル デザイナーを右クリックして、[追加/関数のインポート] を選択します。関数に名前を付け (SP と同じ名前で問題ありません)、マップするストアド プロシージャを選択します。SP が 1 つのフィールドのみを返す場合は、返された結果をスカラーのコレクションにマップできます。SP が複数のフィールドを返す場合、返された結果をコレクションまたはエンティティ (すべてのフィールドが単一のテーブルからのものである場合) または複合型のコレクションにマップできます。

複合型を使用する場合は、列の取得ボタンをクリックして、SP のすべての列を取得できます。次に、[新しい複合型の作成] ボタンをクリックして、この複合型を作成します。

4) ドメイン サービス クラスを Web プロジェクトに追加します。このサービスの DataContext として作成した DataModel を選択します。クライアントに公開するすべてのエンティティを選択します。これらのエンティティに対してサービス機能を生成する必要があります。

5) エンティティ リストに複合型が表示されない場合があります。サービスに SP のクエリ関数を手動で追加する必要があります。たとえば、SP が SP1 と呼ばれ、生成した複合型が SP1_Result と呼ばれます。

ドメイン サービス クラスに次のコードを追加します。

public IQueryable<SP1_Result> SP1()
    {
        return this.ObjectContext.SP1().AsQueryable();            
    }

これで、プロジェクトをコンパイルできます。「SP1_Result にキーがありません」(RIA サービス SP1 ベータ版を使用していない場合) のようなエラーが表示される場合があります。その場合、サービス メタデータ ファイルで次の操作を行う必要があります。

SP1_Result メタデータ クラスを追加し、Key フィールドにタグを付けました。

[MetadataTypeAttribute(typeof(SP1_Result.SP1_ResultMetadata))]
public partial class SP1_Result
{
    internal sealed class SP1_ResultMetadata
    {
        [Key]
        public int MyId;  // Change MyId to the ID field of your SP_Result
    }
} 

6) ソリューションをコンパイルします。これで SP1_Result がクライアントに公開されました。生成されたファイルを確認すると、SP1_Result がエンティティ クラスとして生成されていることがわかります。これで、Silverlight コードで DomainContext.SP1Query と DomainContext.SP1_Results にアクセスできるようになりました。他のエンティティ (テーブルにマップされたエンティティ) クラスと同じように扱うことができます。

于 2011-02-07T22:28:24.227 に答える