EF Code First外键

时间:2011-02-28 03:54:45

标签: asp.net-mvc entity-framework code-first

我正在使用EF Code First库试图处理预约安排应用程序。

我的模型将是客户,约会和约会类型...

基本上每个客户都可以有一组约会,每个约会可以有一个约会类型...

代码如下:

public class Client
 {
      [ScaffoldColumn(false)]
      public int ClientID { get; set; }

      [Required]
      public string FirstName { get; set; }

      [Required]
      public string LastName { get; set; }

      [EmailAddress]
      [Required]
      public string Email { get; set; }

      [DataType("DateTime")]
      public DateTime Birthday { get; set; }

      [Required]
      public string CellPhone { get; set; }

      public string HomePhone { get; set; }
      public string Notes { get; set; }

      public virtual ICollection<Appointment> Appointments{ get; set; }

      public string Name { 
           get{
                return FirstName + " " + LastName;
           }
      }
public class Appointment
 {
      [ScaffoldColumn(false)]
      public int AppointmentID { get; set; }

      [ScaffoldColumn(false)]
      public int ClientID { get; set; }

      [ScaffoldColumn(false)]
      public int AppointmentTypeID { get; set; }

      [Required]
      public DateTime AppointmentDate { get; set; }
      public string Notes { get; set; }

      public virtual AppointmentType AppointmentType { get; set; }
      public virtual Client Client { get; set; }
 }
     public class AppointmentType
 {
      [ScaffoldColumn(false)]
      public int AppointmentTypeID { get; set; }

      [Required]
      public string Name { get; set; }
      public string Description { get; set; }

      public virtual Appointment Appointment { get; set; }
 }

当我创建约会类型和客户端时,一切正常,但是当我创建约会时,我收到以下错误...

  • InnerException {“INSERT语句与FOREIGN KEY约束冲突\”Appointment_Client \“。冲突发生在database \”Salon.Models.SalonContext \“,table \”dbo.Clients \“,列'ClientID'中。 \ r \ n语句已终止。“} System.Exception {System.Data.SqlClient.SqlException}

如果需要更多详细信息,请告知我们......我只想弄清楚我是否遗漏了设置中的任何内容。

enter image description here

enter image description here

当我在帖子上调试以创建约会时会发生这种情况...所有的ID都是0,这是正确的,但其他字段应该是否为空?或者它是否重要......只是不太熟悉这应该是什么样子,这是我的第一个EF Code First项目......

2 个答案:

答案 0 :(得分:1)

根据您的设置,一个AppointmentType只能有一个约会。这是一对一的映射。在这种情况下,您最好将AppointmentType移动到约会实体中。否则,我认为更合乎逻辑的是,AppoitmentType可以有许多约会,但是一个Appointment只能有一个AppointmentType。因此,您应该在AppointmentType实体中有一个虚拟ICollection。

 public class AppointmentType
 {
      [ScaffoldColumn(false)]
      public int AppointmentTypeID { get; set; }

      [Required]
      public string Name { get; set; }
      public string Description { get; set; }

      public virtual ICollection<Appointment> Appointments { get; set; }
 }

我不确定这是导致问题的原因,但可能是。有时映射错误会导致抛出一些奇怪的异常。尝试一下,如果问题得到解决,请告诉我。

答案 1 :(得分:0)

根据您的约束,Appointment中的AppointmentType和Client不能为null。您可以删除约束或在对象属性中设置正确的对象。例如,创建Client和AppointmentType,然后为创建的Client创建Appointment,创建AppointmentType