LightSwitchファーストタッチ2(トランザクション)
Lightswitchを少し触ったので気づいた点をメモ。
Submitでの更新はトランザクションとして処理される。検索の分離レベルはReadCommitted、サブミット(更新)はRepeatableReadで、既定ではDTCは利用されない。DTCを利用したい場合や明示的なトランザクションスコープを制御したい場合ExecutingとExecutedのイベントでTransactionScopeを利用する。
private TransactionScope trnScope; partial void SaveChanges_Executing() { trnScope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }); } partial void SaveChanges_Executed() { trnScope.Complete(); trnScope.Dispose(); }
Submitパイプライン
クライアントでSubmitした後に動作するサーバー側処理。クライアントで行われたエンティティの変更をサーバー側でリプレイするような感じで動作する。
-
- SaveChanges_CanExecute処理
- SaveChanges_Executing処理
- EntitySet_CanRead, CanInsert, CanUpdate, CanDelete
- 変更・追加したエンティティのプロパティの検証
- EntitySet_Validate処理
- EntitySet_Inserting処理
- EntitySet_Updating処理
- EntitySet_Deleting処理
- DB更新処理(データプロバイダ経由で更新)
- EntitySet_Inserted処理
- EntitySet_Updated処理
- EntitySet_Deleted処理
- SaveChanges_Executed処理
- SaveChanges_ExecuteFailed処理
その他
今回の内容の元資料は以下の資料、少し古いけどPart1はアーキテクチャ、Part2は画面関連とLightSwitchの基本的な構造を把握するのに良いかも。
The Anatomy of a LightSwitch Application Part 3 – the Logic Tier
画面から2つのデータソースを更新する方法は以下を参考。トランザクションは各データソースことになるので注意。
Using Both Remote and Local Data in a LightSwitch Application
ここまでやってよいかは?ですが、どうしても同一トランザクションで処理したい場合RIAサービスを作成してLightSwitchのデータベースをRIAサービスから更新することもできるかもしれません。このサンプルWCF RIA Service: Combining Two TablesでRIAサービスからLightSwitch組み込みのDBをアクセスする方法が紹介されています。