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