2012-03-19 17 views
1

私は、次のC#クラスを持っている:私は2つの工assのインスタンス(SomeClass1とSomeClass2)など何かを持っている場合はエンティティフレームワーク奇妙なマッピング

public class SomeClass{ 
    public string Name; 
    public List<SomeClass> List1; 
    public List<SomeClass> List2; 
} 

は:

SomeClass1.List1.Add(SomeClass2); 

をまたにSomeClass1を追加context.SaveChanges()が呼び出されたとき何らかの理由でSomeClass2.List2。どうすればこれを防ぐことができますか?

編集:私は最初にコードを使用しています。 ありがとう

+1

あなたが作成したマッピングが見えないと言うことは不可能です。それを提供してください。 –

+0

はまずコードですか? –

+0

これが最初のコードです。私はそれを追加することを忘れました。 – Fritsie

答えて

1

Fluent APIとのマッピングがない場合は、慣習に基づいてマッピングを作成します。この場合の規約は、List1List2が同じ関係のナビゲーションプロパティ(この場合は「自己参照」の多対多関係)のであるということです。

あなたが経験する効果がDetectChanges()が呼び出されたときに実行(または内部DetectChanges()呼び出すSaveChanges())される自動関係フィックスアップです。このフィックスアップは、添付されたエンティティの逆ナビゲーションプロパティを自動的に更新し、相互に一貫性を保ちます。これを防ぐことはできませんし、実際には問題ではありません。

編集

あなたは二つのリストの間のマッピングをしたくない場合は、流暢APIとの明示的なマッピングを指定する必要があります。たとえば:両方のリストは、1対多の関係を分離するために属している場合は、指定する必要があります。

modelBuilder.Entity<SomeClass>() 
    .HasMany(s => s.List1) 
    .WithRequired()    // or WithOptional() 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<SomeClass>() 
    .HasMany(s => s.List2) 
    .WithRequired()    // or WithOptional() 
    .WillCascadeOnDelete(false); 

このマッピングは、各関係の第二の端部がモデルにさらされていないことを述べている(したがってWithRequired()パラメータなし/ WithOptional()) 。

同様に、HasMany(s => s.List1/2).WithMany().Map(...)で2つの多対多の関係を指定できます。

+0

この関係を取り消す方法はありますか?リストがそれぞれ逆であるという私の意図ではありません。 – Fritsie

+0

@Fritsie:私の編集を参照してください。 – Slauma