Не удалось присоединить объект типа HBrokerWebApplication.Models.Computer, потому что другой объект того же типа уже имеет такой же - PullRequest
0 голосов
/ 27 мая 2020

Я пытался обновить компьютерную таблицу, в которой есть одно или несколько изображений, когда я получил эту ошибку:

'Не удалось прикрепить объект типа' HBrokerWebApplication.Models.Computer ', потому что другой объект тот же тип уже имеет такое же значение первичного ключа. Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменено» или «Изменено», если какие-либо объекты на графике имеют конфликтующие значения ключей. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей, созданные базой данных. В этом случае используйте метод «Добавить» или «Добавленное» состояние объекта для отслеживания графика, а затем установите для состояния не новых объектов значение «Без изменений» или «Изменено» в зависимости от ситуации. '

Код:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ComputerId,Brand,RAM,Storage,ScreenSize,CPU,Warranty,WarrantyType," +
    "Battery,ComputerStatus,Price,Network,Camera,OS,Color,CDDrive,ScreenCard,AdvertiserId")] Computer computer, IEnumerable<HttpPostedFileBase> files)
{
    if (ModelState.IsValid)
    {
        if (files != null && files.Any())
        {
            var pictures = new List<Picture>();
            var pics = db.Computers.Find(computer.ComputerId).Pictures;

            foreach (Picture file in pics.ToList())
            {
                if (file != null)
                {
                    //find old image's path
                    string OldPath = Path.Combine(Server.MapPath("/Uploads"), file.PictureURL);

                    //delete the old photo from our server
                    System.IO.File.Delete(OldPath);
                    db.Entry(file).State = EntityState.Deleted;
                }
            }

            computer.Pictures = new List<Picture>();
            foreach (var file in files)
            {
                string filName = Guid.NewGuid() + Path.GetFileName(file.FileName);
                pictures.Add(new Picture { PictureURL = filName });
                file.SaveAs(Path.Combine(Server.MapPath("/Uploads/"), filName));

            }
            computer.Pictures.AddRange(pictures);
        }
        db.Entry(computer).State = EntityState.Modified;   
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(computer);
}

Здесь произошло исключение:

db.Entry(computer).State = EntityState.Modified;

Я прочитал много проблем с тем же сообщением об ошибке, но ни одна из них не сработала для меня из-за, возможно, списка изображений, которые я хочу обновить.

Кто-нибудь может дать мне рабочее решение моей проблемы, пожалуйста?

...