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 对象只有一个 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, thenbar也将被添加,因为它是同一个对象图的一部分,但不:它没有被添加 - 也没有在FooId之后Bar更新对象的调用SaveChanges(尽管IdFoo 对象的 已更新)。

所以,我的猜测是这种行为是因为我正在处理 POCO 而不是 EF 代理对象,因此没有“管道”来完成这项工作。我可以IdFoo对象中获取 并手动将其存储在Bar对象中(反之亦然)并进行更多调用SaveChanges,但显然这不是正确的方法。

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

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 回答