0
実体を考える

A.DefaultBA.DefaultCはオプションですエンティティの循環グラフを保存するInvalidOperationExceptionを防止するにはどうすればよいですか?

class A { 
    B DefaultB { get; set; } 
    C DefaultC { get; set; } 
} 

class B { 
    A { get; set; } 
} 

class C { 
    A { get; set; } 
} 

modelBuilder.Entity<A>().HasOptional(x => x.DefaultB).WithMany(); 
modelBuilder.Entity<A>().HasOptional(x => x.DefaultC).WithMany(); 

context.Set<T>().Add(...)context.SaveChanges()のどのような組み合わせで、次のオブジェクトグラフを保存するために働くだろうか?それが今であるとEF does not seem to handle cycles very wellので(反復しながら、コレクションの変更)

var b = new B(); 
var c = new C(); 
var a = new A { DefaultB = b, DefaultC = c, }; 
b.A = a; 
c.A = a; 
// now save these... 

は、私がInvalidOperationExceptionを取得します。

答えて

0

こんにちは、あなたのマッピングを調整する必要があります。このマッピングを持つため、省

modelBuilder.Entity<A>().HasOptional(a => a.DefaultB); 
modelBuilder.Entity<A>().HasOptional(m => m.DefaultC); 
modelBuilder.Entity<B>().HasRequired(m => m.A); 
modelBuilder.Entity<C>().HasRequired(m => m.A); 

、正しいを:

var a = new A() { Id = 3 }; 
context.As.Add(a); 
context.SaveChanges(); 

var b = new B() { Id = 1}; 
var c = new C() { Id = 2 }; 
context.Bs.Add(b); 
context.Cs.Add(c); 
b.A = a; 
c.A = a; 
a.DefaultB = b; 
a.DefaultC = c; 
context.SaveChanges(); 
+0

私はあなたが答えたように私はこれを試作たと思います!確認済み。 – Kit

関連する問題