我有一些看起来像这样的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对象。最好的方法是什么?
答案 0 :(得分:3)
如果实体满足创建代理对象的要求,您可以通过从上下文本身调用create函数来使其工作:
var foo = dbContext.Foos.Create();
dbContext.Foos.Add(foo);
var bar = dbContext.Bars.Create();
foo.Bar = bar;
dbContext.SaveChanges();