私が見つけたすべての記事は、RIA を使用して新しいアイテムを追加する方法を示しています。誰も既存のデータを更新しませんか? それは確かにそうではないようです。
シナリオ:
VM のサービスを使用してエンティティをプルしています。エンティティは、私のビューから VM を使用して編集されます。次に、エンティティをデータベースに保存したいと思います。追加したくありません。削除したくありません。更新したいです。サーバー側でそのためのメソッドが表示されますが、データコンテキストで変更を送信するだけです。
元のエンティティのクローンを作成してから、元のエンティティをアタッチし、現在のエンティティをその上にコピーしようとしました
public void SaveDoctors(Doctors current, Doctors original, Action<SubmitOperation> callback)
{
var ctx = new RefereeDomainContext();
ctx.Doctors.Attach(original);
original = current;
ctx.SubmitChanges(callback,null);
}
これもうまくいきません。今日、私は何十ものブログを調べましたが、エンティティの更新方法を教えてくれると主張している場合でも、常に新しいエンティティの追加に関するものを見つけました。
エンティティをサーバー側に送信してそこで実行することは簡単にできますが、それが正しい形式であるかどうかはわかりません。
エンティティを更新する適切な場所はどこですか? SL5 を使用していますが、使用している RIA サービスのバージョンをどのように伝えればよいかわかりません。
明確化
ビューモデルからのサービス呼び出しを使用してエンティティを取得します。
Doctors doctors = GetService<IDoctors>.GetDoctor().FirstorDefault(d=>d.id=xxxx);
Doctor エンティティを VM 構造にプッシュします。
DoctorsVM=new DoctorsVM(doctors);
これは、viewmodel のプロパティを通じて編集される医師への参照を保持します。すべての子は、子オブジェクトの ObservableCollections に入力されます。
この特定のエンティティの処理が完了し、保存する準備ができたら:
GetService.UpdateCurrentDoctor(DoctorsVM.Doctor)//元のエンティティを参照します。
これは私がそれを失うところです。私がこれを行う場合:私のメソッド内では機能しません
var ctx=new DataContext;
ctx.Attach(currentDoctor);//attaches as unmodified
ctx.Add(currentDoctor);//creates a new Entity. Dont want that.
ctx.AttachAsModified は、サーバー側でのみ使用できます。ctx.UpdateDoctors は、サーバー側でのみ使用できます。
これは私が迷子になるところです。
私は WPF/デスクトップのバックグラウンドを持っているので、非同期ランドスケープ全体で迷っているだけかもしれません。そして、私は正しい方向へのプッシュが必要です。