SPでデータをロードしたい。
SP を Linq to SQL クラスに配置しましたが、データグリッドにデータをロードするために SP を使用する方法がわかりません。LinqToSqlDomainService では、SP を呼び出す方法がわかりません。どのような手順を使用する必要がありますか。
これのサンプルはありますか?すべてのサンプルはテーブルを使用します。
ありがとう
このサイトで次の優れたステップバイステップガイドを見つけました -
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 にアクセスできるようになりました。他のエンティティ (テーブルにマップされたエンティティ) クラスと同じように扱うことができます。
この投稿が役立つことを願っています: http://blogs.msdn.com/brada/archive/2009/08/24/business-apps-example-for-silverlight-3-rtm-and-net-ria-services- 7 月-更新-パート 24-ストアド-procedures.aspx
sproc と同じ構造の空のビューを作成し、そのストアド プロシージャを DomainService の関数にマップできます。http://cid-289eaf995528b9fd.skydrive.live.com/self.aspx/Public/sproc.zip のサンプルを参照してください
ストアド プロシージャの呼び出しは簡単です。これを関数としてインポートしてから、関数を DDS のメンバーとして呼び出します。戻り値は、バインドするオブジェクトの DataContext を設定するために使用できる ObservableCollection<> です。
...マジックコードで生成されたプロキシを介してSilverlight RIAアプリで使用したい場合を除きます。その場合、結果の行がエンティティの1つと正確に一致しない限り、ガチョウがクックされます。その基準を満たすことができる場合は、DomainService クラスを編集し、ObjectContext メソッドをラップするメソッドを表示します。