2014-12-01 177 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

相關問題