ASP.NET MVC - 附加类型' X'的实体。失败

时间:2016-03-25 18:46:15

标签: c# asp.net-mvc entity-framework

这是一个模型;

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");

当我将项目添加到etiket列表时,我收到此错误。

  

附加类型&#39; Tasarito.Models.UrunEtiketTablo&#39;失败,因为同一类型的另一个实体已具有相同的主键值。使用&#39;附加&#39;方法或将实体的状态设置为“未更改”#39;或者&#39;修改&#39;如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用&#39;添加&#39;方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者&#39;修改&#39;酌情。

这是交叉表;

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

        public virtual Etiket UrunEtiket { get; set; }
    }

我哪里可以犯错误? TY。

1 个答案:

答案 0 :(得分:0)

我发现了同样的问题,在我的情况下,我只是更改了代码

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

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

它工作正常。 希望它也适用于您的问题。