IRepositoryパターンは、EFとPOCOの最初のセットアップで非常にうまく機能しています。ただし、「コレクションが変更されました。列挙操作が実行されない可能性があります」という奇妙な問題が発生しています。
基本的に、次のようにObjectSetを含むリポジトリがあります。
protected IObjectSet<T> ObjectSet
{
get
{
if (_objectSet == null)
{
_objectSet = this.Context.CreateObjectSet<T>();
}
return _objectSet;
}
}
そして、次のように実装されているIRepositoryクラスのdeleteメソッド:
public void Delete(T entity)
{
ObjectSet.DeleteObject(entity);
}
それはすべて非常に簡単で、この時点まで問題はありませんでしたが、コレクションのオブジェクトを削除しようとすると、このエラーが発生します。削除メソッドにブレークポイントを設定してObjectSetにカーソルを合わせ、結果を展開してすべてが読み込まれるようにすると、DeleteObjectは正常に機能しますが、すべてのアイテムがObjectSetから読み込まれない場合、コレクション変更エラーで失敗します。
POCOやIRepositoryを使用せずにテストベッドをセットアップしましたが、正常に動作するので、基本的に、私が見逃していることが本当に明らかなものがあります。私たちは複数のプロジェクトでこのパターンを使用することに非常に深く関わっており、人々はそれを修正しようとするのではなく、それを回避しようとしています。これは私が考えていないオプションではありません。
ヘルプや洞察に感謝します。
編集:
これは非常に奇妙ですが、モデルから特定のエンティティを削除すると、このエラーはなくなりますが、巨大なモデルがあり、削除で特定のテーブル以外のすべてを最初に削除したため、追跡できません。これまでに誰かがこれに遭遇したことがあります。継承テーブル(タイプごと)を使用していますが、これが問題であることを証明することはできません。
2番目の編集:
OK型継承ごとのテーブルを除いてすべてをモデルから削除しましたが、1つを除くすべての派生型を削除して削除しようとすると、エラーが発生します。だから私の質問は、タイプ継承ごとにテーブルを使用するときに他の誰かがこの問題を抱えていたのですか?