2011-07-09 6 views
1

WCF RIA Servicesを使用して更新ステートメントを作成しようとしていますが、更新するたびに「同じIDを持つエンティティが既にこのEntitySetに存在しています。私が間違っているものを探しているかを考え出す?同じIDを持つエンティティが既にこのエンティティセットに存在しています

ステップ1

LoadOperation<Analysis> AnalysisLP = ((App)Application.Current)._context. 
       Load(((App)Application.Current)._context.GetAnalysisQuery(). 
       Where(o => o.ProjectID == Convert.ToInt32(((App)Application.Current).Project.ProjectID))); 

ステップ2

AnalysisLP.Completed += delegate 
      { 
       if (!AnalysisLP.HasError) 
       { 
        Analysis = AnalysisLP.Entities.FirstOrDefault(); 
}; 

ステップ3

0123起動することができますどこに
  ((App)Application.Current)._context.Analysis.Attach(Analysis); 
     ((App)Application.Current)._context.SubmitChanges(OnSubmitCompleted, null); 

誰でも助けてもらえますか?私は間違っていますか? おかげ

答えて

4

あなたのオブジェクトAnalysisは、クエリを経由してのEntitySetから来ているが、まだそののEntitySetに取り付けられています。

プロパティの変更とSubmitChangesの呼び出しが必要です。もう一度取り付けないでください。

1

"同じIDを持つエンティティが既にEntitySetに存在する"例外を回避するには、更新、変更、または削除されるエンティティは、保存時に常にサーバーから完全にリフレッシュする必要があります。エンティティの以前のインスタンス固定インスタンスがぶら下がるのを防ぐには、次の規則に従います。

エンティティインスタンスには、変更されたプロパティ変更イベントハンドラがありません。代わりに、OnCreatedまたはOnPropertyNameChanged部分メソッドを使用してください。

エンティティがEntitySetに追加されているときに、親エンティティインスタンスの参照を割り当てないで、SelectedParentがおそらくそうでないため、外部キーIDプロパティ(myEntity.ParentalID = SelectedParent.ParentalID myEntity.Parent = SelectedParentではなく)を使用します。保存時にリロードされるのは、作業単位の一部ではないためです。そのため、参照は保存およびリフレッシュ後に保持されます。

エンティティのエンティティプロパティのポピュレーションソースとして使用されるコンボボックスは、保存後にエンティティセットをリロードする必要があります。それ以外の場合、コンボをポピュレートする関連エンティティは、前のエンティティインスタンスへの参照を保持します。

関連する問題