0

我有一个带有关系集合 ICollection ClubUsers 的 ClubItem 对象。我从上下文中加载了一个 ClubItem,并向 CluItem 添加了几个新用户。将 ClubItem 保存为断开状态时,上下文不会将新的 ClubUsers 视为新实体。如何告诉上下文发生了变化?我已经用它来改变 ClubItem 的实体状态:

    public virtual void Update(IEntity entityToUpdate)
    {
        DbSet.Attach(entityToUpdate);
        Context.Entry(entityToUpdate).State = EntityState.Modified;

        SaveChanges();
    } 
4

1 回答 1

2

在您的特定情况下,您可能只需删除该Attach行。Attach将包含对象图中其他分离实体的分离实体置于状态Unchanged。当您将状态更改为Modified仅影响父实体时,子实体仍处于状态Unchanged。如果你打电话SaveChanges给孩子们将不会被保存,因为他们的状态是Unchanged

如果你不打电话Attach给孩子们保持分离,直到SaveChanges被调用,EF 将假定它们是新实体(因为它们没有附加到上下文)并将它们的状态设置为Added. 然后它们将被插入到数据库中。

但是,如果删除该Attach行,则不能再使用该方法来更新现有父级和现有子级之间的关系。

通常,当分离的实体包含已更改的实体的子集合时,添加已从您那里删除的实体通常必须从数据库中重新加载原始对象图并将更改合并到其中。复杂分离对象图的这种更新不能以通用方式工作,并且需要特定于实体类型的代码。一个例子在这里:https ://stackoverflow.com/a/5540956/270591

于 2012-06-17T23:30:16.637 回答