Я тороплюсь добавить сущность в DbSet и сохранить изменения в контексте в Entity Framework Code First. У меня есть University DbSet:
public DbSet<University> Universities { get; set; }
У меня 5 класс в пользовании - Срок; Факультет; Отделение; Университет; и студент. Их методы конструктора похожи на:
public Student()
{
Universities = new List<University>();
User = new DATABASE.User();
Terms = new List<Term>();
}
public University()
{
UniversityFaculties = new List<Faculty>();
UniversityDepartments = new List<Department>();
Students = new List<Student>();
}
public Term()
{
Students = new List<Student>();
Lessons = new List<Lesson>();
university = new University();
}
public Faculty()
{
University = new University();
Students = new List<Student>();
}
public Department()
{
University = new University();
Students = new List<Student>();
}
Я получаю объект "Студент" из предыдущих форм (студент, который вошел в программу). Когда я пытаюсь добавить сущности, заполненные полями со списком и текстовыми полями, я понял, что Universities DbSet заполняется реальной сущностью, которую я хотел добавить, но также заполняется пустой сущностью University. Мои значения Id не увеличиваются автоматически, поэтому я увеличиваю их вручную. Мой код:
Создать объект факультета:
Faculty f = entities.Faculties.OrderByDescending(o => o.FacultyId).FirstOrDefault();
int newFacultyId = (f == null ? 1 : f.FacultyId + 1);
var faculty = new Faculty();
faculty.FacultyId = newFacultyId;
faculty.FacultyName = FacultyComboBox2.SelectedItem.ToString();
Создать объект отдела:
Department d = entities.Departments.OrderByDescending(o =>o.DepartmentId).FirstOrDefault();
int newDepartmentId = (d == null ? 1 : d.DepartmentId + 1);
var department = new Department();
department.DepartmentId = newDepartmentId;
department.DepartmentName = DepartmentComboBox3.SelectedItem.ToString();
Создать университетскую сущность:
University uni = entities.Universities.OrderByDescending(o => o.UniversityId).FirstOrDefault();
int newUniId = (uni == null ? 1 : uni.UniversityId + 1);
var university = new University();
university.UniversityId = newUniId;
university.UniversityName = UniversityComboBox1.Text;
university.UniversityFaculties.Add(faculty);
university.UniversityDepartments.Add(department);
university.Students.Add(student);
student.Universities.Add(university);
faculty.University = university;
department.University = university;
faculty.Students.Add(student);
department.Students.Add(student);
Создать временную сущность:
Term t = entities.Terms.OrderByDescending(o => o.TermId).FirstOrDefault();
int newTermId = (t == null ? 1 : t.TermId + 1);
var term = new Term();
term.TermId = newTermId;
term.TermTerm = int.Parse(TermComboBox1.Text);
term.TermYear = int.Parse(YearComboBox1.Text);
term.Students.Add(student);
student.Terms.Add(term);
term.university = university;
И мои дополнения к DbSet:
entities.Faculties.Add(faculty);
entities.Departments.Add(department);
entities.Universities.Add(university);
entities.Terms.Add(term);
entities.SaveChanges();
Но у меня возникла ошибка с ошибкой проверки, поэтому я использовал блоки try catch для анализа исключения. Я понял, что мой DbSet Universities содержит пустую сущность University. Когда я отлаживаю, я понял, что они исходят от созданий сущностей, которые я делаю с целью определения идентификаторов сущностей. Я попытался достичь нулевых значений в Universities DbSet и удалить их, но у меня не получилось этого сделать. Снимок экрана ниже:
У других DbSet такой проблемы нет. Я не знаю, что делать, чтобы избавиться от этой проблемы. Любая помощь будет признательна. Спасибо.