2017-09-25 70 views
1

我有一個名爲「SPs」的對象,指的是存儲在數據庫中的所有提供者的庫存產品列表。如何更改多個對象所指的實體的狀態?

在我的行動,我需要創建一個名爲「PSP的」基於目前的供應商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; 
    } 
} 

但接收到異常處理消息是這樣的:

連接類型'SP'的實體失敗,因爲另一個相同類型的實體 已具有相同的主鍵值。

更多,這裏是SPS導航性能在產品類:

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

和SP類:

public class StockProduct 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int SPID { get; set; } 

    [ForeignKey("Product")] 
    public int ProductID { get; set; } 
    public Product Product { get; set; } 

    [ForeignKey("Provider")] 
    public int ProviderID { get; set; } 
    public Provider Provider { get; set; } 
    ... 
} 

因此,任何想法?

+0

我認爲在你的表格中你的狀態字段有一個唯一的約束。 –

+0

我們可以看到你的產品類別嗎? – GGO

+0

@GGO:不是我們應該看的'SP'類嗎? – Flater

回答

0

從例外情況可知,您在ChangeTracker中有另一個SP實例。您需要分離另一個實例,然後您可以附加新實例。

異常本身是描述性的:您不能附加具有重複Primary Keys的實體。