私はあるオブジェクトを編集するためのフォームを持つWebページを持っています。私は新しいものを追加したり、既存のものを修正し、従業員を削除することができますフォームのEntity Framework 4.1でPOCO(追加/更新/削除)の子コレクションを更新する
Public Overridable Property Employees As List(Of Employee)
:このオブジェクトは、次のように定義された他のオブジェクトのコレクションが含まれています。保存をクリックすると、新しい値がサーバーに送信されます。サーバー上で、ユーザーが存在するかどうかを確認します。存在すれば、その値を変更し、存在しなければ追加します。サーバー上に存在し、送信されなかったすべての従業員は、削除済みとしてマークされます(状態はEntityState.Deletedに変更されました)。私は、次のコード(dbCollection =データベース・エンティティ、フォームから送信さをnewCollection =コレクション)を使用しよう:
For Each item In dbCollection
Dim dbItem = item
Dim newTask = newCollection.FirstOrDefault(Function(i) i.Id = dbItem.Id)
If newTask Is Nothing Then
Me.Entry(item).State = EntityState.Deleted
Else
Me.Entry(item).CurrentValues.SetValues(newTask)
newCollection.Remove(newTask)
End If
Next
For Each item In newCollection
dbCollection.Add(item)
Next
Me.SaveChanges()
このコードは動作しません、EntityState.Deletedに変更すると、コレクションからオブジェクトを削除し、それぞれのためにループが壊れているので、コレクションが変更されているので...
私は、forループを使用するか、オブジェクトを追加して別のリストに最初に削除することで、この問題を克服できることを知っていますが、私のコードはよかった。
ご意見ありがとうございます。
これは私の問題の簡単かつ実現可能な解決策です。それはあなたのものか、どこかで見たことがありますか?私はしばらく待って、他の誰かがここに答えを投稿するかどうかを見ます。そうでなければ私はあなたを受け入れます。 –
@MichalB:私は非常に頻繁にそれを使用しています。多くの例でこれを見ることができます。これは、「コレクションが修正されました」という問題を解決するための標準的な解決策のようなものです。私の発明ではありません。 – Slauma