次のようなPOCOオブジェクトがいくつかあります。
public class Foo
{
public int Id { get; set; }
public string FooProperty { get; set; }
public int BarId { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string BarProperty { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
各Fooオブジェクトには1つのバーがあります(その逆も同様です)。
次に、Foo/Barオブジェクトの新しいペアを作成します。だから私はこれをします(そしてこれは私が間違っていると思うところです):
var foo = new Foo() { FooProperty = "hello" };
dbContext.Foos.Add(foo);
var bar = new Bar() { BarProperty = "world" };
foo.Bar = bar;
dbContext.SaveChanges();
おそらくお分かりのように、私が「追加」したので、同じオブジェクトグラフの一部であるため、追加されることを望んでいますが、foo
追加bar
されていません。またFooId
、Bar
オブジェクトのが更新された後も追加されません。を呼び出しますSaveChanges
(ただし、Id
Fooオブジェクトは更新されます)。
したがって、この動作は、EFプロキシオブジェクトではなくPOCOを処理しているためであり、この動作を実現するための「配管」はありません。Id
オブジェクトからをフェッチしてFoo
手動でオブジェクトに格納しBar
(またはその逆)、をさらに呼び出すこともできますがSaveChanges
、これは明らかに正しい方法ではありません。
したがって、おそらく、裸のPOCOオブジェクトではなく、EFプロキシオブジェクトを作成する必要があります。それを行うための最良の方法は何ですか?