我有一个带有关系集ICollection ClubUsers的ClubItem对象。我从上下文加载一个ClubItem,并向CluItem添加几个新用户。将ClubItem保存为断开状态时,上下文不会将新的ClubUser视为新实体。如何告诉上下文有什么变化?我已经用它来改变ClubItem的实体状态:
public virtual void Update(IEntity entityToUpdate)
{
DbSet.Attach(entityToUpdate);
Context.Entry(entityToUpdate).State = EntityState.Modified;
SaveChanges();
}
答案 0 :(得分:2)
在您的具体情况下,您可以删除Attach
行。 Attach
将分离的实体(包括对象图中的其他分离实体)放入状态Unchanged
。当您将状态更改为Modified
时,它仅影响父实体,子项仍处于状态Unchanged
。如果您致电SaveChanges
,则不会保存孩子,因为他们的状态为Unchanged
。
如果你不调用Attach
,那么在调用SaveChanges
之前,子项会保持分离状态,EF会认为它们是新实体(因为它们没有附加到上下文中)并将其状态设置为Added
。然后将它们插入到数据库中。
但是,如果删除Attach
行,则无法再使用该方法更新现有父级和现有子级之间的关系。
通常,当分离的实体包含已更改的实体的子集合时,添加从中删除实体的位置通常必须从数据库重新加载原始对象图并将更改合并到其中。复杂的分离对象图的这种更新不能以通用方式工作,并且需要特定于实体类型的代码。这里有一个例子:https://stackoverflow.com/a/5540956/270591