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