0

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つを除くすべての派生型を削除して削除しようとすると、エラーが発生します。だから私の質問は、タイプ継承ごとにテーブルを使用するときに他の誰かがこの問題を抱えていたのですか?

4

1 に答える 1

0

これはEntityFrameworkのバグです。接続に応じて4.5で修正されました。

于 2012-05-09T08:05:48.380 に答える