2

次のような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されていません。またFooIdBarオブジェクトのが更新された後も追加されません。を呼び出しますSaveChanges(ただし、IdFooオブジェクト更新されます)。

したがって、この動作は、EFプロキシオブジェクトではなくPOCOを処理しているためであり、この動作を実現するための「配管」はありません。IdオブジェクトからをフェッチしてFoo手動でオブジェクトに格納しBar(またはその逆)、をさらに呼び出すこともできますがSaveChanges、これは明らかに正しい方法ではありません。

したがって、おそらく、裸のPOCOオブジェクトではなく、EFプロキシオブジェクトを作成する必要があります。それを行うための最良の方法は何ですか?

4

1 に答える 1

3

エンティティがプロキシオブジェクトを作成するための要件を満たしている場合は、コンテキスト自体からcreate関数を呼び出すことでこれを機能させることができます。

    var foo = dbContext.Foos.Create();
    dbContext.Foos.Add(foo);
    var bar = dbContext.Bars.Create();
    foo.Bar = bar;
    dbContext.SaveChanges();
于 2012-08-06T16:18:45.710 に答える