【发布时间】:2017-01-21 19:34:03
【问题描述】:
当我尝试在我的应用中更新用户个人资料时,我收到以下错误:
UPDATE 语句与 FOREIGN KEY 约束冲突 “FK_dbo.UserDetails_dbo.Companies_CompanyId”。冲突发生在 数据库“aspnet-eksp-20161223071733”,表“dbo.Companies”,列 '公司 ID'。该语句已终止。
虽然它可能看起来不言自明,但我不知道如何解决它并使我的代码正常工作。我对 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 的值,该值在 Companies 表中不存在。
-
正如我在问题中提到的,我不会更新此值。模型中最后两个字段的值是在用户注册时插入的,之后我不想更改它。
-
@RobertRoss 你能试试我的回答吗?我只是省略了所有只使用 FirstName 的属性,但请尝试查看异常是否消失
-
似乎
UserDetails在数据库中有一个名为Companies_CompanyId的列。检查它是否还有一列CompanyId。我怀疑该声明更新了CompanyId,而不是Companies_CompanyId。您还可以通过监视插入语句及其值来检查这一点。如果您看到这两列,我们应该尝试解决映射问题。
标签: c# asp.net-mvc entity-framework ef-code-first