UPDATE 语句与外键约束冲突

本文关键字:约束 冲突 语句 UPDATE | 更新日期: 2023-09-27 18:32:36

最近,我尝试通过实体框架代码优先在我的MVC应用程序中添加一对多关系。 我添加了关系以将下拉列表中的管理员名称绑定到正在填写的当前应用程序。 所以我有一个表用于管理员名称,一个表用于实际应用程序信息。应用程序和管理员名称下拉列表似乎工作正常,提交时所有信息都会进入我的数据库,但是当我尝试编辑应用程序时,出现以下错误:

UPDATE 语句与 FOREIGN KEY 约束冲突 数据库表 "dbo.管理员",列"管理员 ID"

我尝试将我的 Id 列设置为"不为空",但这并没有解决问题。

型:

public class Administrator
{
    public int AdministratorId{ get; set; }
    public string AdministratorName{ get; set; }
}
public class Application
{
    public Application()
    {
        GetDate = DateTime.Now;
    }
    public int ApplicationId { get; set; }
    [DisplayName("Marital Status")]
    public bool? MaritalStatus { get; set; }
    [Required]
    [DisplayName("First Name")]
    public string FirstName { get; set; }
    [DisplayName("Middle Initial")]
    public string MiddleInitial { get; set; }
     [Required]
    [DisplayName("Last Name")]
    public string LastName { get; set; }
    [DisplayName("Date Submitted")]
    public DateTime GetDate { get; set; }
    public int AdministratorId{ get; set; }
    public virtual Administrator Administrator{ get; set; }
}

控制器(索引):

 public ActionResult Index()
    {
        ViewBag.LoanOfficerId = new SelectList(db.Administrators, "AdministratorId", "AdministratorName");
        return View();
    }
    // POST: Applications/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Index([Bind(Include = "AdministratorId,FirstName,MiddleInitial,LastName,")] Application application)
    {

        if (ModelState.IsValid)
        {
ViewBag.AdministratorId= new SelectList(db.Administrators, "AdministratorId",     "AdministratorName", application.Administrator);
            db.Applications.Add(application);
            db.SaveChanges();
            return RedirectToAction("Thanks");
        }

        return View(application);
    }

UPDATE 语句与外键约束冲突

管理员

ID 是 int 类型,因此默认值为 0。除非您的数据库中有管理员 ID 为 0 的管理员记录,否则这将破坏外键约束。

将应用程序类上的管理员 ID 类型更改为 int?应该可以解决此问题。

就我而言,当我尝试使用 null 作为外键字段的值更新对象时,我遇到了此错误。

因此,当您更新对象时,请指示您的 Fkey 或在调用 savechanges用:

db.Entry(Myobject).Property(u => u.MyForeignkey).IsModified = false;
db.SaveChanges();