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



我有一些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对象只有一个柱(反之亦然)。

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

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

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

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

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

最新更新