2012-03-29 61 views
0

當我嘗試編輯網球場......我得到這個異常:System.Data.UpdateException;無法因爲初級key'value不存在System.Data.UpdateException;無法添加外鍵,因爲主鍵的值不存在

TennisCourt模型添加外鍵:

public class TennisCourt 
{ 
    [Key] 
    public int ID { get; set; } 

    [Display(Name = "Extérieur ?")] 
    [Column("Outside")] 
    public bool Outside { get; set; } 

    [Display(Name = "Disponible ?")] 
    [Column("Available")] 
    public bool Available { get; set; } 

    [Display(Name = "Description")] 
    [Column("Description")] 
    [MaxLength(90, ErrorMessage = "Description cannot be longer than 90 characters.")] 
    public string Description { get; set; } 

    [Display(Name = "TennisClubID")] 
    public int TennisClubID { get; set; } 


    public virtual TennisClub TennisClub { get; set; } 
    public virtual ICollection<Reservation> Reservations { get; set; } 
} 

「TennisClub模式」

public class TennisClub 
{ 
    public int ID { get; set; } 

    [Required(ErrorMessage = "Nom du club requis.")] 
    [Display(Name = "Nom")] 
    [Column("Name")] 
    [MaxLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")] 
    public string Name {get;set;} 

    [Required(ErrorMessage = "Adresse du club requise.")] 
    [Display(Name = "Adresse")] 
    [Column("Address")] 
    [MaxLength(40, ErrorMessage = "Address cannot be longer than 40 characters.")] 
    public string Address {get;set;} 

    [Required(ErrorMessage = "Ville requise.")] 
    [Display(Name = "Ville")] 
    [Column("City")] 
    [MaxLength(20, ErrorMessage = "City cannot be longer than 20 characters.")] 
    public string City { get; set; } 

    [Required(ErrorMessage = "Numéro de téléphone requis.")] 
    [Display(Name = "Num. Tél")] 
    [Column("PhoneNumber")] 
    [MaxLength(20, ErrorMessage = "Phone number cannot be longer than 20 characters.")] 
    public string PhoneNumber { get; set; } 

    [Display(Name = "Mail")] 
    [Column("Mail")] 
    [MaxLength(30, ErrorMessage = "Mail cannot be longer than 30 characters.")] 
    public string Mail { get; set; } 

    [Required(ErrorMessage = "Heure d'ouverture requise.")] 
    [Display(Name = "Heure d'ouverture")] 
    [Column("OpenTime")] 
    [DisplayFormat(DataFormatString = "{0:T}", ApplyFormatInEditMode = true)] 
    public DateTime OpenTime { get; set; } 

    [Required(ErrorMessage = "Heure de fermeture requise.")] 
    [Display(Name = "Heure de fermeture")] 
    [Column("CloseTime")] 
    [DisplayFormat(DataFormatString = "{0:T}", ApplyFormatInEditMode = true)] 
    public DateTime CloseTime { get; set; } 

    [Required(ErrorMessage = "Nombre d'heure(s) pour un match en simple requis.")] 
    [Display(Name = "Temps de jeu (simple)")] 
    [Column("GameTimeSimple")] 
    [DisplayFormat(DataFormatString = "{0:T}", ApplyFormatInEditMode = true)] 
    public DateTime GameTimeSimple { get; set; } 

    [Required(ErrorMessage = "Nombre d'heure(s) pour un match en double requis.")] 
    [Display(Name = "Temps de jeu (double)")] 
    [Column("GameTimeDouble")] 
    [DisplayFormat(DataFormatString = "{0:T}", ApplyFormatInEditMode = true)] 
    public DateTime GameTimeDouble { get; set; } 

    public virtual ICollection<TennisCourt> TennisCourts { get; set; } 
    public virtual ICollection<Teacher> Teachers { get; set; } 
    public virtual ICollection<Customer> Customers { get; set; } 
    public virtual ICollection<Manager> Managers { get; set; } 
    public virtual ICollection<Reservation> Reservations{ get; set; } 
} 

的錯誤是類TennisCourt之間TennisClub與外鍵...

奇怪的是,當我創建一個網球場,它的工作!

例外這裏:

[HttpPost] 
    public ActionResult Edit(TennisCourt tenniscourt) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       db.Entry(tenniscourt).State = EntityState.Modified; 
       db.SaveChanges();//here the exception 
       return RedirectToAction("Index"); 
      } 
      catch (DbUpdateException dbEx) 
      { 
       System.Diagnostics.Debug.WriteLine(dbEx.InnerException); 
      } 
     } 
     return View(tenniscourt); 
    } 

什麼我做錯了嗎?在此先感謝...

回答

1

設置斷點db.Entry(tenniscourt).State = EntityState.Modified;看看TennisClubID包含什麼。它可能被設置爲在數據庫的網球俱樂部表中不存在的一些值。從你的例子來看,原因並不容易。 Mabe在你的圖形用戶界面中缺少一些涉及tennisclub的東西?

+0

感謝其實TennisClubId是空的...我會檢查,謝謝 – Razor 2012-03-29 12:18:21