2012-02-28 16 views
3

多対多の関係を持つSQL Serverのデータモデルがあります。エンティティフレームワークの多対多関係が無限ループを引き起こす

public class Class1 
{ 
    public ICollection<Class2> Class2s {get;set;} 
} 

public class Class2 
{ 
    public ICollection<Class1> Class1s {get;set;} 
} 

今の問題は、いくつかの状況(すべてではない)で、これは無限ループを引き起こすように見えるということです:ときにEntity Frameworkのは、モデルのこの関係は、このような双方向リストの参照を作成することによってことを行います。私は、コレクションの1つにAdd()を呼び出すと、両方のクラスのプロパティのgetメソッド間でフレームワークが前後にループし、効果的にすべてのCPUを奪い、アプリケーションをフリーズするケースがあります。

誰もこのような経験はありますか?それが起こらないように私は何ができますか?

PS:私はRab Hallett's Mocking Framework generatorを使用してコードを生成しています。これが適切かどうかはわかりません。

アップデート1:それは間違いなく、モックフレームワークに関連しています

アップデート2:それは無限ループではないのですが、それは両方のテーブルからすべての要素にアクセスする - おそらくのn * mはアクセスしてしまいます。私はそれをもっと見て戻ってくる

+3

それは間違いなく、関連ある:

をすることができますそれを修正するにはハレットのモックフレームワークにこの動作は、標準の.NET Entity Frameworkコード生成では再現できません – Nilzor

+0

Nilzor、これを確認できますか?模擬フレームワークなしで同じケースをコンテキスト上で実行することは可能でしょうか? –

+0

上記のコメントは確認です。私は実際に、嘲笑の枠組みなしで文脈で同じケースを実行しています。編集:私の問題を解決するには、a)バグを修正するか、回避するか、またはb)EFのための別のモック可能オブジェクトジェネレータを見つけなければならない – Nilzor

答えて

0

あなたが言うように、無限ループはいくつかのケースでのみです。おそらくデータの問題です。

たとえば、class1 Xには3つのclass2のA、B、およびCがあります。class2 AにXのclass1がある場合は、無限ループになります。

Automapperを使用しているときにもこの問題が発生しました。何infinateが

  • がxの反復の後にループを停止してカウンタを追加ループしないが存在するよう

    • クリーンアップデータ、
  • +0

    残念ながら、Get呼び出しをトリガーするコードはEntity Framework内にあり、変更できません。コード生成ツールの製品であるため、データ構造を変更することはできません。私はコード生成ツールを変更することができました。それが今のところ私が行ったことです。 (update1を参照) – Nilzor

    関連する問題