1

Entity Framework 4 データ モデルをラップする WCF データ サービスがあります。WCF Data Services Client ライブラリを使用して WPF クライアントをサービスに接続しています。

WCF Data Services で、追跡されたオブジェクトへの変更を元に戻したりキャンセルしたりすることはできますか?

シナリオ: UI で、ユーザーがオブジェクトを編集できるようにします。保存ボタンとキャンセルボタンがあります。ユーザーが保存することを選択した場合、WCF コンテキストで SaveChanges() を呼び出すと、WCF サービスを介して変更がデータベースに送信されます。ユーザーがキャンセルをクリックした場合、変更を元に戻し、現在のオブジェクトの元のプロパティ値に戻したいと思います。

WCF データ サービス クライアント ライブラリに変更追跡が組み込まれていることは知っていますが、この情報にアクセスする方法が見つかりません。

Entity Framework では、コンテキストは Refresh メソッドをサポートし、RefreshMode.StoreWins を指定してオブジェクトを渡すことができます。これにより、変更が効果的にキャンセル/元に戻されます。ここに文書化されています:http://msdn.microsoft.com/en-us/library/bb896255.aspx

クライアント アプリケーションの WCF DataServices で同じことを実現する方法について何か提案はありますか?

乾杯クリス

4

2 に答える 2

1

私が知っている唯一の「解決策」は次のとおりです。

var oldMergeOption = _service.MergeOption;
_service.MergeOption = MergeOption.OverwriteChanges;
try {
    _service.YourQueryable.Where(x => x.Id==oldObject.Id).Single();
} finally {
    _service.MergeOption = oldMergeOption;
}

これにより、「oldObject」の値が DB に格納されている値に置き換えられます。ただし、Single() によって返されるオブジェクトが常に「oldObject」と同じになるかどうかはわかりません。

于 2012-12-07T11:02:57.503 に答える
0

私は通常、変更をデータベースにコミットする準備ができるまで、DataServiceContext 内のエンティティに対する操作を控えます。エンティティをドメイン モデルの一部として扱わないので、アダプタとリポジトリ クラスを使用して、モデル オブジェクトをエンティティ オブジェクトに適合させる特定のドメイン モデルを作成します。このように、ドメイン モデル内のすべての操作は、データベースにコミットする準備ができるまで自己完結型です。私が言及していることに関する Ben Day のすばらしい記事は、こちらにあります: http://visualstudiomagazine.com/articles/2011/04/01/pfcov_silverlight-mvvm-tips.aspx

于 2013-09-03T20:01:06.533 に答える