这是一个模型;
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。
答案 0 :(得分:0)
我发现了同样的问题,在我的情况下,我只是更改了代码
db.Entry(model).State = EntityState.Modified; //error line
到
db.Set<YourModel>().AddOrUpdate(model);
它工作正常。 希望它也适用于您的问题。