0

エンティティを考えると、

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

class B {
    A { get; set; }
}

class C {
    A { get; set; }
}

ここでA.DefaultB、およびA.DefaultCはオプションです。

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

次のオブジェクトグラフを保存するにはcontext.Set<T>().Add(...)、とのどのような組み合わせが機能しますか?context.SaveChanges()

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...

現在のように、InvalidOperationExceptionEFはサイクルをうまく処理していないように見えるため、(反復中のコレクションの変更)を取得します。

4

1 に答える 1

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();
于 2011-10-13T16:41:09.353 に答える