2

Silverlight4 と Ria Service を使用しています:

3 つのレコード ( 1 、 2 、 3 ) を持つテーブル (「MyTable」と呼ばれる) があるとします。アプリケーションのどこかに次のコードを記述しました。

CurrentItem  = 1;
MyContext.MyTables.Delete(CurrentItem);
CurrentItem  = 2;
MyContext.MyTables.Delete(CurrentItem);

何らかの理由で、「保存」ボタンを押す前に、最初の削除済みアイテムを拒否したい(1)が、2番目のアイテムを削除したい(2)。これは、使用できないことを意味します:

MyContext.RejectChanges()  

すべての変更(削除したい削除済みアイテムを含む)を拒否するため、IRevertibleChangeTrackingを使用すると問題を解決できます。次のようなもの:

((IRevertibleChangeTracking) MyItem).RejectChanges();

しかし、このインターフェイスを使用する前に、削除されたアイテムにアクセスする必要があります。最初は MyContext.MyTables 経由で取得しようとしましたが、削除されたレコードが含まれていないため、EntityChangeSet で取得しようとしました。

EntityChangeSet Changes =  MyContext.EntityContainer.GetChanges();
MyTable  DeletedItem  = Changes.First<MyTables>( e => e.ID = 1 ) ;

そして、私は IRevertibleChangeTracking を使用しました:

((IRevertibleChangeTracking) DeletedItem  ).RejectChanges();

しかし、実行後、このコード行はレコードの状態を変更せず、「削除済み」のままだったので、「保存」ボタンを押すと、データベースから物理的に削除されました!!!! IRevertibleChangeTracking は、削除/追加されたアイテムに対しては機能しないようです (変更されたアイテムに対してのみ機能します)。

したがって、DomainContext から特定の削除済みアイテムを拒否する方法はありますか。

ありがとう、

4

1 に答える 1

0

もう少し調べてみると、 Colin Blair が次のように述べている場所を見つけました。

すべての RIA サービス エンティティは IRevertibleChangeTracking インターフェイスを実装します。エンティティを IRevertibleChangeTracking にキャストし、RejectChanges を呼び出すだけです。RejectChanges は、新規または削除されたエンティティには機能しません。

各エンティティを削除する代わりに、ブール型のプロパティを false に設定し、終了したらフラグを に設定してエンティティを削除できますfalseか?

于 2012-12-10T06:47:57.680 に答える