在EF中添加具有现有父级的新记录

时间:2011-03-30 05:38:24

标签: entity-framework entity-framework-4

我在层次结构中使用Entity Framework和一组3个不同的表。想想ApartmentUnit - > ApartmentComplex - > OwnerOrganization。每个数据库中都有一个主键和一个外键。当我构建EF模型时,它为每个模型创建了属性。实际上,保存每个实例非常容易。例如,我还了解到,为了添加新单元,我首先需要添加一个组织,将其添加到新的组合中,然后在保存之前将其添加到新单元。一点工作,但这是有道理的。

我现在感到困惑的是,我有一个新的公寓单元,但它住在一个现有的综合体中。我可以使用适当的属性构建一个新的复杂对象,并将其附加到新单元,但是当我去保存单元时,框架会在suiteComplex表中发出主键冲突,因为它试图添加复杂的我作为一个新的复合体而不是现有的复合体。

我的解决方法似乎是首先检索复杂的新实例,而不是构建一个 - 实际上,让EF构建它而不是我 - 但这意味着另一次往返并且看起来像是矫枉过正对我来说。是否有更简单的方法来保存我的新公寓单元?

1 个答案:

答案 0 :(得分:2)

您可以在不转到数据库的情况下创建现有的复合体,但必须在保存之前将其附加到上下文中。

Complex existingComplex = new { ID = 1234 };
entitiesContext.AttachTo("Complexes", existingComplex);
newAppartment.Complex = existingComplex;
entitiesContext.SaveChanges();