Я хочу реализовать отношение «один к одному» с обоими сторонами, необходимыми для свободного API в коде Entity Framework 6. Сначала 1001 *
У меня есть основной класс:
public class Student
{
public int Id{ get; set;}
public string Name{ get; set;}
public StudentProfile StudentProfile { get; set; }
}
и у меня есть зависимый класс:
public class StudentProfile
{
public int Id{ get; set;}
public string Description{ get; set;}
public Student Student { get; set; }
}
Кроме того, у меня есть конфигурация для отношения один к одному, в этом случае ТРЕБУЕТСЯ оба конца:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasRequired(student => student.StudentProfile)
.WithRequiredPrincipal(profile => profile.Student);
base.OnModelCreating(modelBuilder);
}
После выполнения update-database получаемые сгенерированные таблицы будут:
Стол столбцов StudentProfile:
Таблица Столбцы студентов:
В основной программе я могу сохранить студента с его профилем:
UMLModel umlContext = new UMLModel();
//Studentprofile object
StudentProfile studentProfile = new StudentProfile();
studentProfile.Description = "Emily Profile Description";
//Student object
Student student = new Student();
student.Name = "Emily";
student.StudentProfile = studentProfile;
//Save Student and StudenProfile Objects
umlContext.Students.Add(student);
umlContext.SaveChanges();
После выполнения основной программы в базе данных таблица StudentProfiles:
и таблица учеников:
Проблема возникает, когда я пытаюсь сохранить одного студента БЕЗ его профиля, программа позволяет сохранить его, и предполагается, что он не позволяет:
UMLModel umlContext = new UMLModel();
Student student = new Student();
student.Name = "John";
umlContext.Students.Add(student);
umlContext.SaveChanges();
После выполнения основной программы в базе данных для таблицы StudentProfiles теперь есть:
и для стола. Студенты:
Одним из способов предотвратить это является использование аннотаций данных, но мне не нравится этот подход, поскольку классам домена требуется дополнительный код:
public class Student
{
public int Id{ get; set;}
public string Name{ get; set;}
[Required]
public virtual StudentProfile StudentProfile { get; set; }
}
Вопросы:
- Это ошибка в свободном API?
- Есть ли способ решить эту проблему с помощью Fluent API без изменения
классы доменов?
Заранее спасибо!