В двух словах исключение выбрасывается во время модели оболочки POSTing и изменяется состояние одной записи на "Модифицировано" . Перед изменением состояния состояние установлено на "Отдельно", но вызов Attach() действительно вызывает ту же ошибку. Я использую EF6.
Пожалуйста, найдите мой код ниже (имена моделей были изменены для облегчения чтения)
Model
// Wrapper classes
public class AViewModel
{
public A a { get; set; }
public List<B> b { get; set; }
public C c { get; set; }
}
контроллер
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (!canUserAccessA(id.Value))
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
var aViewModel = new AViewModel();
aViewModel.A = db.As.Find(id);
if (aViewModel.Receipt == null)
{
return HttpNotFound();
}
aViewModel.b = db.Bs.Where(x => x.aID == id.Value).ToList();
aViewModel.Vendor = db.Cs.Where(x => x.cID == aViewModel.a.cID).FirstOrDefault();
return View(aViewModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(AViewModel aViewModel)
{
if (!canUserAccessA(aViewModel.a.aID) || aViewModel.a.UserID != WebSecurity.GetUserId(User.Identity.Name))
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
if (ModelState.IsValid)
{
db.Entry(aViewModel.a).State = EntityState.Modified; //THIS IS WHERE THE ERROR IS BEING THROWN
db.SaveChanges();
return RedirectToAction("Index");
}
return View(aViewModel);
}
Как показано выше строка
db.Entry(aViewModel.a).State = EntityState.Modified;
исключение исключений:
Прикрепление объекта типа "A" не удалось, поскольку другой объект тот же тип уже имеет такое же значение первичного ключа. Это может произойти, когда используя метод "Прикрепить" или устанавливая состояние объекта для "Без изменений" или "Модифицировано" , если любые объекты на графике имеют противоречивые значения ключа. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей базы данных. В этом случае используйте метод "Добавить" или "Добавлено" состояние объекта для отслеживания графика и затем установите состояние не новых объектов в "Без изменений" или "Модифицировано" как необходимо.
Кто-нибудь видит что-то не так в моем коде или понимает, в каких обстоятельствах он будет вызывать такую ошибку при редактировании модели?