2014-12-01 388 views
1

最近我尝试通过Entity Framework Code First在我的MVC应用程序中添加一对多关系。我添加了关系以将管理员名称从下拉列表绑定到当前正在填写的应用程序。所以我有一个表用于管理员名称,一个表用于实际应用程序信息。管理员名称的应用和下拉列表似乎做工精细,所有信息进入我的上提交的数据库,但是当我尝试编辑应用程序,我得到以下错误:UPDATE语句与FOREIGN KEY约束冲突

The UPDATE statement conflicted with the FOREIGN KEY constraint The conflict occurred in database table "dbo.Administrator", column 'AdministratorId'

我试过设置我的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); 
    } 
+1

错误表明您正在尝试将重复数据放入您的'AdministratorId' id列中......我没有看到它与您的模型有任何关系。 – paqogomez 2014-12-01 19:19:36

+0

您的代码中某处必须尝试更改管理员表中的记录。该错误意味着该记录的ID正被用作另一个表中的外键。 – Icemanind 2014-12-01 19:19:45

+4

在SaveChanges被调用之前,AdministratorId的值是什么?我的猜测是该值为0. – maxbeaudoin 2014-12-01 19:21:02

回答

1

AdministratorId是int类型,所以将有默认值为0。除非你已经在你的数据库有一个管理员记录与AdministratorId为0,这将打破你的外键约束。

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

+0

你真棒。这是有道理的,但不确定添加“?”后面的逻辑我的外键。 – dc922 2014-12-01 19:56:29

+0

int?表示可空int。它们的默认值为null(而不是0),因此不会导致外键查看Administrator表。 – 2014-12-01 20:10:16

+0

我意识到它使它可以为空。在设计者和代码中设置空值是否有区别? – dc922 2014-12-01 20:10:38

相关问题