Когда я пытаюсь обновить профиль пользователя в моем приложении я получаю следующее сообщение об ошибке:Операция UPDATE противоречит ошибке ограничения FOREIGN KEY?
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_dbo.UserDetails_dbo.Companies_CompanyId". The conflict occurred in database "aspnet-eksp-20161223071733", table "dbo.Companies", column 'CompanyId'. The statement has been terminated.
Хотя это может выглядеть сам explenatory я понятия не имею, как решить эту проблему и сделать свой код работать. Я очень новичок в EF и всей платформе в целом.
У меня есть внешний ключ в моей модели, конечно, и это поле для ввода ключей не пустое, оно имеет значение.
Вот модель:
public class UserDetails
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserDetailsId { get; set; }
public byte[] ImageData { get; set; }
[NotMapped]
public HttpPostedFileBase UploadImage { get; set; }
[NotMapped]
public string ImageBase64 => System.Convert.ToBase64String(ImageData);
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserAddress { get; set; }
public string UserCountry { get; set; }
public string UserPostalCode { get; set; }
public string UserPhoneNumber { get; set; }
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
public string identtyUserId { get; set; }
}
И метод контроллера:
public ActionResult Edit([Bind(Include = "UserDetailsId,ImageData,FirstName,LastName,UserAddress,UserCountry,UserPostalCode,UserPhoneNumber,CompanyId,identtyUserId")] UserDetails userDetails, HttpPostedFileBase UploadImage)
{
if (ModelState.IsValid)
{
byte[] buf = new byte[UploadImage.ContentLength];
UploadImage.InputStream.Read(buf, 0, buf.Length);
userDetails.ImageData = buf;
db.Entry(userDetails).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
//ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "CompanyName", userDetails.CompanyId);
return View(userDetails);
}
В представлении я могу обновить все, кроме двух последних полей (в модели), но я сомневаюсь в этом это проблема.
Любая помощь будет оценена по достоинству.
Какова ценность CompanyId, когда вы публикуете свое редактирование? Означает ли это значение в соответствующей таблице в вашей базе данных? Похоже, вы отправляете инструкцию обновления в базу данных, которая содержит значение для CompanyId, которое не существует в таблице компаний. – Christos
Как я упоминал в вопросе, я не обновляю это значение. Значение для двух последних полей из модели вставляется, когда пользователь регистрируется, и я не хочу его менять. –
@RobertRoss может ответить на ваш ответ. Я просто опустил все свойства, которые только что использовали FirstName, но, пожалуйста, попытайтесь выяснить, прошло ли исключение или нет. –