Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改多个对象引用的实体的状态?_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 如何更改多个对象引用的实体的状态?

C# 如何更改多个对象引用的实体的状态?,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一个名为“SPs”的对象,它指的是数据库中存储的所有供应商的库存产品列表 在我的操作中,我需要创建一个名为“PSPs”的新对象,该对象根据当前提供商的ID过滤SP: 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

我有一个名为“SPs”的对象,它指的是数据库中存储的所有供应商的库存产品列表

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

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
我试图改变PSP引用的实体的状态,如下所示:

    PSPs.ForEach(o => { 
       dbContext.Entry(o).State = EntityState.Modified;
    }
}
但收到一条异常消息,如下所示:

    PSPs.ForEach(o => { 
       dbContext.Entry(o).State = EntityState.Modified;
    }
}
附加类型为“SP”的实体失败,因为 同一类型已具有相同的主键值

有关详细信息,请参见产品类中的SPs导航属性:

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

那么,有什么想法吗?

从例外情况来看,在
ChangeTracker
中有另一个
SP
实例。您需要分离另一个实例,然后才能附加新实例


例外情况是描述性的:您不能使用重复的
主键附加实体

我认为在您的表中,您的状态字段有一个唯一的约束。我们可以查看您的产品类别吗?@GGO:这不是我们应该查看的
SP
类别吗?是的right@CoskunOzogul:状态不是一个对象本身的属性,但DbContext内的DbSet项的属性。它未映射到Db列,因此不能具有唯一约束。关于手头的问题:我相信错误来自另一个代码块,它显示了什么。.Entry()调用附加对象,如果该对象不在调用之前的上下文中;然而,从代码片段来看,这是意料之中的。如果创建新的PSP对象,请在将其附加到上下文之前,确保返回SP的导航属性为null(您可以设置FK)。