0

私が見つけたすべての記事は、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/デスクトップのバックグラウンドを持っているので、非同期ランドスケープ全体で迷っているだけかもしれません。そして、私は正しい方向へのプッシュが必要です。

4

2 に答える 2

0

質問は少し長いので、答えは少し長くなる可能性があります:)

本当に必要な場合は、エンティティのクローンを作成しないでください。

BackGroundエンティティモデルには、各エンティティのキ​​ーがあります。ドメインサービスを調べると、すべてのCRUD操作がこのキー属性によって実行されていることがわかります。サーバー側からセットを返す場合、2つのエンティティが同じキーを持っている場合、クライアント側にそのうちの1つが表示されます。

回答レコードの更新は簡単です。DomainServiceクラスインスタンスを使用してエンティティを取得し、変更するアイテムを取得して送信します。以上です。

      //a line of unsafe-dummy code
      domService.GetDoctorByID("124..").FirstOrDefault().CitizenNumber='CN123';

      //domService class track changeset so it decide update
      domService.SubmitChanges();       
      //Update occurs by entity key i.e. DoctorID

「医師」という表現もありますが、SilverlightとRiaサービスを使用してヘルスケアアプリケーションも開発しています。幸運を!

于 2013-03-18T06:51:06.800 に答える
0

1 つのセッションの間、データコンテキストを維持する必要があるようです。私はこれが好きではありませんが、それはそれです。アプリケーションからの次の検索でドメインコンテキストをリセットして、非常に大きくならないようにしています。

于 2013-03-26T15:57:06.490 に答える