2017-09-25 4 views
1

私は "SP"という名前のオブジェクトを持っており、dbに格納されているすべてのプロバイダの在庫製品のリストを参照しています。複数のオブジェクトがそれを参照しているエンティティの状態を変更するにはどうすればよいですか?

私のアクションでは、私は現在のプロバイダのIDに基づいてのSPをフィルタリング「の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 

を私はこのようなPSPのことで呼ばエンティティの状態を変更しようとしました:

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

が、このようなメッセージで例外を受け取っ:

同じタイプの別のエンティティがすでに同じプライマリキー値を持っているため、タイプ 'SP'のエンティティをアタッチできませんでした。多くのための

、ここでのSPのナビゲーションプロパティは、Productクラスである:

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

あなたのテーブルには、あなたのStateフィールドに固有の制約があると思います。 –

+0

Productクラスのplを表示できますか? – GGO

+0

@GGO:私たちが見なければならない 'SP'クラスではありませんか? – Flater

答えて

0

ChangeTrackerSPという別のインスタンスがあることが判明しました。他のインスタンスを切り離し、新しいインスタンスを追加する必要があります。

例外は説明的なものです:Primary Keysの複製を持つエンティティを付加することはできません。

関連する問題