我正在使用实体框架和DbContext API来构建我的应用程序,但我无法处理具有多对多关系的对象。简化保存法可能看起来像这样使用DbContext API添加和删除多对多API
public void MyObj_Save(MyObj myobj)
{
DbContext.Entry(myobj).State = EntityState.Added;
DbContext.SaveChanges();
}
此代码工作正常,但如果MyObj中包含了许多一对多的关系,这是不会被保存。我使用旧的POCO API,我需要附上相关对象上下文知道,但我不能找到一种方法,用的DbContext API正确地做到这一点 - 以下
public void MyObj_Save(MyObj myobj, List<OtherObj> otherObjList)
{
foreach (OtherObj otherObj in otherObjList)
{
DbContext.OtherObj.Attach(otherObj);
myobj.OtherObj.Add(otherObj);
}
DbContext.Entry(myobj).State = EntityState.Added;
DbContext.SaveChanges();
}
一个简单的例子我没有得到任何错误,但关系不会被保存。该怎么办?
它应该工作。是否保存了myobj?但连接表中没有新行? – Slauma
通过将实体附加到上下文中,您不确定要实现什么目标。如果你附加,那么它“向ObjectContext添加一个对象,并将该对象设置为Unchanged状态。在Unchanged状态下,实体框架将实体键值视为final。如果多于一个特定类型的实体具有相同的键值,实体框架将抛出一个异常。为避免发生异常,请使用AddObject方法附加分离的对象,然后相应地更改状态。请参阅MSDN [文章](http://msdn.microsoft.com/en-us/library/bb896271.aspx)。 –
@EmmieGabrielleLewis:他想创建** new **对象'myobj'和**现有**对象'otherObjList'的列表之间的关系。使用'Attach'对此是正确的。 – Slauma