EF Code First Foreign Key's - PullRequest
       27

EF Code First Foreign Key's

2 голосов
/ 28 февраля 2011

Я работаю с библиотекой EF Code First, пытаясь работать с приложением для планирования встреч.

У меня будет модель Client, Appointment и AppointmentType ...

Обычно каждый клиент может иметь набор назначений, и каждое назначение может иметь один тип назначения ...

Код выглядит следующим образом:

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 \ ". Конфликт произошел в базе данных \" Salon.Models.SalonContext \ ", таблице \" dbo.Clients \ ", столбце" ClientID ". \ r \ nОпределение завершено. "} System.Exception {System.Data.SqlClient.SqlException}

Если вам нужны дополнительные сведения, пожалуйста, дайте мне знать ... Я просто пытаюсь выяснить, что-то не хватает в настройке.

enter image description here

enter image description here

Это то, что происходит, когда я отлаживаю пост, чтобы создать встречу ... Все идентификаторы равны 0, что правильно, но не должны ли другие поля быть пустыми ?? Или это имеет значение ... Просто не очень знаком с тем, как все должно выглядеть, это мой первый проект EF Code First ...

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Согласно вашей настройке, один AppointmentType может иметь только одну встречу.Это сопоставление один к одному.В этом случае вам лучше переместить AppointmentType в сущность Appointment.В противном случае, что я считаю более логичным, AppoitmentType может иметь много назначений, но одно назначение может иметь только один AppointmentType.Соответственно, у вас должна быть виртуальная ICollection внутри вашей сущности AppointmentType.

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

Я не уверен, что это является причиной проблемы, но это может бытьИногда при отображении ошибок возникают странные исключения.Попробуйте и дайте мне знать, если ваша проблема будет решена.

0 голосов
/ 28 февраля 2011

По вашим ограничениям AppointmentType и Client не могут быть нулевыми в Appointment. Вы можете удалить ограничения или установить правильные объекты в свойствах объекта. Например, создайте Client и AppointmentType, а затем создайте Appointment для созданного Client с созданным AppointmentType

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...