クライアントサイドでデータを更新するためにWCF RIAサービスを再度呼び出すのに問題があります。ここに私の場合です:サーバ側でwcf riaサービスでクライアント側のエンティティのインスタンスをリフレッシュするにはどうすればよいですか?
、ドメインサービスのようなものです:
クライアント側ではpublic IQueryable<Person> GetPersonByID(int id)
{
var result = this.ObjectContext.Persons.
Where(e => e.PersonID == id);
return result; // check point 1
}
、私は(次のように呼び出しを行い、これは私が「リフレッシュと呼ばれるボタンで呼び出しです「ボタン):
は、データがpersonID=1
、Age = 16
を言うと、私はDB内の人を持っていると仮定します。ここでは
this._amsService.Context.Load<Person>(
this._amsService.Context.GetPersonByIDQuery(this.Person.ID),
LoadBehavior.RefreshCurrent,
result =>
{
this.Person = result.Entities.FirstOrDefault(); //check point 2
this.RaisePropertyChanged("Person");
}, null);
は私がしようとしているものです
次に、アプリケーションを実行すると、正しい方法でデータが取得されます。
データベースに移動し、データをSQLで更新して
Age = 20
に変更します。アプリに戻って「更新」ボタンをクリックして新しい電話をかけるが、年齢は
20
に更新されず、まだ16
です。
私がデバッグモードでアプリケーションを実行し、データを確認してください。
チェックポイント1で、私は結果のデータを確認し、それが、Age = 20
結構です。
チェックポイント2で、私はresult.Entities
のデータをチェックし、データはリフレッシュされていません。まだそれはAge = 16
です。
私はLoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent
を試しましたが、成功しませんでした。
SLアプリケーション全体をリロードするには、SLアプリケーションのホストページを更新する必要があります。新しいデータが表示されます。これはエンドユーザーには受け入れられません。
なぜか分かりません。私はまた、更新ボタンをクリックすると、データをキャッチするためにフィドラーを使用しようとすると、データは最新Age = 20
を得た。
この問題を解決するにはどうすればよいですか?
明確にするには、 "this.RaisePropertyChanged(" Person ");"でブレークポイントを設定するとどうなりますか? –
サーバー側のコードをデバッグして、そのコードが返すものを確認できますか?エンティティがサーバー側のセッションにキャッシュされていると、データが更新されていない可能性があります。また、クライアント側でpersonプロパティを再設定する必要はなく、クエリを実行するだけでRIAサービスは現在の人物のageプロパティ変更イベントを発生させます。 – Tevin
私はあなたがサーバー側にsubmitchanges()を追加する必要があると思います –