ダウンロード sample.zip (793.6 KB)
ドメインサービスを利用したデータの操作の概要
WCF RIA Serviceでは、サーバ側にドメインサービスを追加すると、「Generated_Code」フォルダの「RIAServicesSample.Web.g.cs」に、そのドメインサービスをWCFを利用して呼び出すためのプロキシクラスや、サービスコントラクトがビルド時に自動的に生成されます。
ここでは、前編のサンプルコードを元に、データグリッドのデータを追加・削除する機能と、当月に使用した金額の合計を表示する機能を作成してみましょう。
データの追加と削除
まずは追加と削除を行うボタンと、さらに当月に使用した金額を表示するボタンをMainPage.xamlに追加し、それぞれのイベントハンドラーを指定します。
追加する場所は、保存、キャンセルボタンの上とします。リスト4の太字部分が、今回追加したコードです(リスト4)。
<StackPanel Orientation="Horizontal">
<Button Content="追加" Height="20" Width="60" Click="追加_Click" />
<Button Content="削除" Height="20" Width="60" Click="削除_Click" />
<Button Content="今月の合計金額" Height="20" Width="60" Click="今月の合計金額_Click" />
</StackPanel> <StackPanel Orientation="Horizontal"> <Button Content="保存" Height="20" Width="60" Command="{Binding ElementName=お小遣い明細DomainDataSource, Path=SubmitChangesCommand}" /> <Button Content="キャンセル" Height="20" Width="60" Command="{Binding ElementName=お小遣い明細DomainDataSource, Path=RejectChangesCommand}" /> </StackPanel>
リスト4の修正を行うと、Visual Studioのデザイナー画面には、保存ボタンの上に3つのボタンが表示されます(図6)。

続いてMainPage.xaml.csを開いて、イベントハンドラーを実装します。
データへの操作は、DomainDataSourceコントロールが保持するエンティティに対して行います。DomainDataSourceコントロールはDataGridコントロールにバインドされているので、更新を行うとDataGridコントロールに即座に反映されます。ここではまだ、サーバのデータベースは更新されていないことに注意してください(リスト5)。
/// <summary>
/// 追加ボタンクリック時のイベントハンドラーです。
/// </summary>
private void 追加_Click(object sender, RoutedEventArgs e)
{
// データソースに追加
var お小遣い明細一覧 = (DomainDataSourceView)お小遣い明細DomainDataSource.DataView;
お小遣い明細一覧.Add(お小遣い明細.Create());
}
/// <summary>
/// 削除ボタンクリック時のイベントハンドラーです。
/// </summary>
private void 削除_Click(object sender, RoutedEventArgs e)
{
// 選択中のレコードを特定
var 削除対象の明細 = お小遣い明細DataGrid.SelectedItem as お小遣い明細;
if (削除対象の明細 == null)
return;
// データソースから削除
var お小遣い明細一覧 = (DomainDataSourceView)お小遣い明細DomainDataSource.DataView;
お小遣い明細一覧.Remove(削除対象の明細);
}
ドメインデータソースに格納されたデータは、ドメインデータソースのSubmitChangeメソッドが呼び出された際に、WCFを利用して、変更セットのみをサーバのドメインサービスに送信します。
ドメインサービスでは、受信した変更セットにどのような操作(CRUD)が加えられたかを判断し、あらかじめ登録された各メソッドを呼び出して、データベースへの更新処理を行います。
図7に、WCF RIA Servicesでのデータ更新の流れを示します。

ドメインサービスで定義するメソッドは、表1に示した命名規則に則って作成すると、WCF RIA Servicesでの操作とメソッドを自動的に割り当てます。メソッドの命名規則に従わない場合は、それぞれに対応した属性をメソッドに適用することで、命名規則に従った場合と同じ効果が表れます。
| 操作 | 属性 | プレフィックス | シグネチャ |
| 検索 | Query | 特に無し | IEnumerable、IQueryable、TEntityのいずれかを返すメソッド |
| 更新 | Update | Update/Change/Modify | void UpdateMethod(TEntity) |
| 追加 | Insert | Insert/Add/Create | void InsertMethod(TEntity) |
| 削除 | Delete | Delete/Remove | void DeleteMethod(TEntity) |
| 呼び出し | Invoke | 特に無し | 特に無し |
1つのエンティティに対しては同じ操作のメソッドを複数登録できないため、注意が必要です。
例えば、お小遣い明細エンティティに対して、1つのドメインモデルで「Updateお小遣い明細メソッド」と「Changeお小遣い明細メソッド」を登録できません。
重複した操作のメソッドを追加すると、次のように既にエンティティに対する別の操作が登録されているというビルドエラーが発生します。
The domain operation entry named 'Changeお小遣い明細' provides redundant functionality. Another method named 'Updateお小遣い明細' already exists.
この記事は参考になりましたか?
- Silverlight 4で作る新しいRIAアプリケーション連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
