我有一些看起来像这样的 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
(尽管Id
Foo 对象的 已更新)。
所以,我的猜测是这种行为是因为我正在处理 POCO 而不是 EF 代理对象,因此没有“管道”来完成这项工作。我可以Id
从Foo
对象中获取 并手动将其存储在Bar
对象中(反之亦然)并进行更多调用SaveChanges
,但显然这不是正确的方法。
所以,大概我需要创建 EF 代理对象而不是裸 POCO 对象。最好的方法是什么?