6

答えが見つからないように見えるかなり単純な質問があります。Ria Services を使用した Silverlight アプリがあります。DomainService クラスには、以下のような update メソッドがあります。

public void UpdateConversationState(ConversationState currentConversationState)
    {
        var original = ChangeSet.GetOriginal(currentConversationState);
        if (original != null)
            ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original);
        else
            ObjectContext.ConversationStatesRepository.Attach(currentConversationState);
        currentConversationState.UpdDat = DateTime.Now;
        if(original.Name != currentConversationState.Name)
            //Do something extra
    }

問題は、Name プロパティが常に空であることです。実際、Id を除くすべてのフィールドにはデフォルト値があります。GetOriginal メソッドがどのように機能するかを検索しようとしましたが、ヘルプが見つかりません。クライアントからサーバーに送り返された変更に基づいて、サーバー上で元のオブジェクトを再構築しようとするようです。

または、更新中にオブジェクトの特定のプロパティが変更されたかどうかを確認するより良い方法を誰かが知っているでしょうか? もちろん、データベースの値と比較することもできますが、データベースへのこの余分な呼び出しを避ける必要があるようです。

どんな助けでも大歓迎です:-)

編集: RoundTripOriginalAttribute について知りました。これはトリックを行うようです。ところで、RIA をもう少しうまく文書化できると思うのは私だけでしょうか?

4

1 に答える 1

3

さて、私はEF4でエンティティの変更を追跡する方法も探していました。いくつかのグーグル検索の後、追跡したいエンティティのプロパティに「RoundTripOriginal」属性を適用する必要があることがわかりました.RIA(デフォルトでは) は元の値をサーバーに送り返しません。

私はまだこれについていくつかの懸念を持っており、教祖の何人かに尋ねました:

http://forums.silverlight.net/forums/t/218332.aspx

これは私にとってはうまくいきましたが、それでも最善の方法だとは思いません。

お役に立てれば。

于 2011-02-11T20:08:32.770 に答える