繁体   English   中英

UPDATE语句与FOREIGN KEY约束错误冲突?

[英]The UPDATE statement conflicted with the FOREIGN KEY constraint error?

当我尝试更新我的应用程序中的用户个人资料时,出现以下错误:

UPDATE语句与FOREIGN KEY约束“ FK_dbo.UserDetails_dbo.Companies_CompanyId”冲突。 数据库“ aspnet-eksp-20161223071733”的表“ dbo.Companies”的“ CompanyId”列中发生了冲突。 该语句已终止。

尽管它看起来很容易理解,但我不知道如何解决它并使我的代码正常工作。 对于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的值。 因此,您会收到该错误。

确保要发送的更新记录具有外键值,并确保该值存在于数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM