当我尝试更新应用程序中的用户配置文件时,出现以下错误:
UPDATE 语句与外键约束冲突 "FK_dbo。UserDetails_dbo。Companies_CompanyId"。冲突发生在 数据库"ASPnet-eksp-20161223071733",表"DBO.公司",栏目 "公司编号"。该语句已终止。
虽然它可能看起来很自我探索,但我不知道如何解决它并使我的代码工作。我对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);
}
在视图中,我可以更新除最后两个字段(在模型中)之外的所有内容,但我怀疑这是问题所在。
任何帮助将不胜感激。
你能说这个吗. 请替换 if 语句下的此代码。
byte[] buf = new byte[UploadImage.ContentLength];
UploadImage.InputStream.Read(buf, 0, buf.Length);
userDetails.ImageData = buf;
--- here first read the dataof edited userDetail get it from context and chage this object state to modified and thn save.
var currentUserDetail = db.UserDetails.FirstOrDefault(f=>f.UserDetailid= Id);
currentUserDetail.FirstName= userDetails.userDetails;
db.Entry(currentUserDetail).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
UserDetails_dbo
表中有一个名为 Companies_CompanyId
的外键列。您正在向数据库发送更新的记录,UserDetails_dbo
记录,但数据库中不存在Companies_CompanyId
的值。因此,您会收到该错误。
确保您发送的更新记录具有外键值,并确保该值存在于数据库中。