2016-03-25 37 views
0

這是一個模型;ASP.NET MVC - 附加一個'X'類型的實體失敗

public class Urunler 
{ 
    public int UrunlerID { get; set; } 

    public virtual Urunler Urun { get; set; } 

    [NotMapped] 
    public List<int> SelectedEtiketIds { get; set; } 

    public virtual List<UrunEtiketTablo> Etiketler { get; set; } 


} 

這是一個代碼;

if (model.SelectedEtiketIds != null) 
       { 
        if (model.Etiketler != null) 
        { 
         if (model.Etiketler.Count > 0) 
         { 
          model.Etiketler.Where(i => !model.SelectedEtiketIds.Contains(i.UrunEtiket.EtiketID)).ToList().ForEach(i => model.Etiketler.Remove(i)); 
          List<int> existlbl = model.Etiketler.Select(i => i.UrunEtiket.EtiketID).ToList(); 
          db.Etikets.Where(i => model.SelectedEtiketIds.Except(existlbl).Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i })); 
         } 
         else 
         { 
          db.Etikets.Where(i => model.SelectedEtiketIds.Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i })); 
         } 
        } 
        else 
        { 
         model.Etiketler = db.Urunlers.Where(i => i.UrunlerID == model.UrunlerID).Select(i => i.Etiketler).FirstOrDefault(); 
         db.Etikets.Where(i => model.SelectedEtiketIds.Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i })); 
        } 
       } 
       else 
       { 
        if (model.Etiketler !=null && model.Etiketler.Count > 0) 
        { 
         model.Etiketler.Clear(); 
        } 
       } 
        db.Entry(model).State = EntityState.Modified; //error line 

       } 
       db.SaveChanges(); 
       return RedirectToAction("Urunler", "DaimiPanel"); 

當我將項目添加到電子郵件列表中時,出現此錯誤。

附加一個'Tasarito.Models.UrunEtiketTablo'類型的實體失敗,因爲另一個相同類型的實體已經具有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。

這是交叉表;

public class UrunEtiketTablo 
    { 
     public int UrunEtiketTabloID { get; set; } 

     public virtual Etiket UrunEtiket { get; set; } 
    } 

我在哪裏可以犯錯? TY。

+0

可能的重複。看到這個問題:http://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-an-entity-of-type-modelname-failed-because-another-ent – Sabuncu

+0

我看這個鏈接。但不是同樣的問題。我的模型通過「SelectedEtiketIds」創建並從視圖中獲得。 – Serkan

+0

請看我在[ASP.NET MVC]上的回答 - 附加'MODELNAME'類型的實體失敗,因爲另一個相同類型的實體已經具有相同的主鍵值](http://stackoverflow.com/questions/ 23201907/ASP淨MVC附着-AN-實體的型MODELNAME失敗的 - 因爲-另一個-ENT/39557606#39557606)。 –

回答

0

我發現了同樣的問題,在我的情況,我只是改變了代碼

db.Entry(model).State = EntityState.Modified; //error line 

db.Set<YourModel>().AddOrUpdate(model); 

,它工作正常。 希望它可以適用於您的問題。

相關問題