如何更改多个对象所指的实体的状态?

时间:2017-09-25 08:19:15

标签: c# asp.net entity-framework

我有一个名为“SP”的对象,指的是存储在db。

中的所有提供商的库存产品列表

在我的操作中,我需要创建一个名为“PSPs”的新对象,它根据当前提供者的ID过滤SP:

Month     ExpectedResult
------    ----------------
Aug15      Aug15 
Nov15      Oct15
Oct15      Nov15
Sept16     Sept16

我尝试更改PSP引用的实体状态,如下所示:

Public ActionResult Edit(int id, int pid)
{
   var SPs = dbContext.Products.Where(o => o.ID == id).Select(o => o.SPs).ToList();
   // do something based on SPs
   ...
   var PSPs = Filter(SPs, pid);
   // edit all PSPs

但是收到了一个例外,其中包含以下消息:

  

附加“SP”类型的实体失败,因为该实体的另一个实体   相同类型已具有相同的主键值。

更多信息,这里是Product类中的SPs导航属性:

    PSPs.ForEach(o => { 
       dbContext.Entry(o).State = EntityState.Modified;
    }
}

和SP类:

public ICollection<SP> SPs { get; set; }

那么,任何想法?

1 个答案:

答案 0 :(得分:0)

事实证明,SP中有另一个ChangeTracker实例。您需要分离另一个实例,然后才能添加新实例。

例外本身就是描述性的:您无法附加包含重复Primary Keys的实体。