UPDATE语句与FOREIGN KEY约束冲突

时间:2014-12-01 19:12:36

标签: c# asp.net-mvc entity-framework

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

  

UPDATE语句与FOREIGN KEY约束发生冲突数据库表" dbo.Administrator",列' AdministratorId'

发生冲突

我已经尝试将我的Id列设置为" Not Null",但这并没有解决问题。

型号:

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);
    }

2 个答案:

答案 0 :(得分:1)

AdministratorId的类型为int,因此默认值为0.除非您在AdministratorId为0的数据库中获得管理员记录,否则将破坏您的外键约束。

将AdministratorId的类型更改为int?在Application类上应该解决这个问题。

答案 1 :(得分:0)

在我的情况下,当我尝试更新具有空值的对象作为外键字段的值时出现此错误。

因此,当您更新对象时,请指出您的Fkey或在致电savechanges之前 使用:

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