如何在EF中使用/保持POCO对象关系?

时间:2012-08-06 16:11:21

标签: entity-framework ef-code-first poco entity-framework-5

我有一些看起来像这样的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对象只有一个Bar(反之亦然)。

现在我想创建一对新的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也会被添加,因为它是同一个对象图的一部分,但是没有:它不是' t添加 - 并且FooId对象的Bar在调用SaveChanges后更新了(尽管Foo对象Id更新)。

所以,我的猜测是这种行为是因为我正在处理POCO而不是EF代理对象,因此没有“管道”来使这项工作。我可以从Id对象中获取Foo并手动将其隐藏在Bar对象中(反之亦然)并再次拨打SaveChanges,但显然是不是正确的方法。

所以,大概我需要创建EF代理对象而不是裸POCO对象。最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

如果实体满足创建代理对象的要求,您可以通过从上下文本身调用create函数来使其工作:

    var foo = dbContext.Foos.Create();
    dbContext.Foos.Add(foo);
    var bar = dbContext.Bars.Create();
    foo.Bar = bar;
    dbContext.SaveChanges();