Ich bin bereit, eine Entity zu DbSet hinzuzufügen und Änderungen im Kontext in Entity Framework Code zuerst zu speichern. Ich habe Universität DbSet:Entity Framework - DbSet enthält Null Entity
public DbSet<University> Universities { get; set; }
Ich habe 5 Klasse im Einsatz - Begriff; Fakultät; Abteilung; Universität; und Student. Ihre Konstruktormethoden sind wie:
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>();
}
erhalte ich eine Student Einheit aus früheren Formen, (Schüler, die im Programm angemeldet). Wenn ich versuche, Entitäten hinzuzufügen, die mit Comboboxen und Textfeldern gefüllt sind, habe ich festgestellt, dass Universities DbSet die reale Entität füllt, die ich hinzufügen wollte, aber auch eine leere Entität der Universität füllt. Meine Id-Werte werden nicht automatisch erhöht, deshalb inkrementiere ich sie manuell. Mein Code:
erstellen Fakultät Entity:
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();
Abteilung Entity erstellen:
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();
Universität Entity erstellen:
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);
erstellen Begriff Entity:
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;
Und mein DbSet Zugänge:
entities.Faculties.Add(faculty);
entities.Departments.Add(department);
entities.Universities.Add(university);
entities.Terms.Add(term);
entities.SaveChanges();
Aber ich habe Fehler bei der Überprüfung fehlgeschlagen, so versuche ich, catch-Blöcke verwendet Ausnahme zu analysieren. Ich erkannte, dass mein Unversity DbSet eine leere Universität enthält. Wenn ich debugge, merkte ich, dass sie von Entity-Kreationen kommen, die ich zum Zweck der Bestimmung der ID der Entitäten mache. Ich versuchte, die Nullwerte in Universitäten DbSet zu erreichen und sie entfernen, aber ich konnte es in diesem way.The Screenshot nicht tun, ist unten:
Andere DbSet die haben nicht so problem.I don‘ t wissen, was zu tun ist, um dieses Problem loszuwerden.Any hilft würde schätzen. Danke.
Die Antwort möglicherweise ist, dass Sie die Universität einmal direkt in das DbSet hinzufügen, aber dann wieder durch die Beziehung zwischen Fakultäten und der Universität. Das Konzept einer Aggregatwurzel in einem domänengestützten Entwurf würde dies berücksichtigen, indem nur der Stamm hinzugefügt wird, der implizit die zugehörigen Entitäten hinzufügt. – strongbutgood
Die Konstrukteure von Fakultät, Semester und Abteilung schaffen genau diese Universität. Es scheint, dass einige von ihnen nicht gesetzt wurden, bis diese Objekte angehängt wurden, versuchen Sie, diese Zuordnungen zu entfernen, da Sie sowieso die Universität als Ganzes eingestellt haben. – DevilSuichiro
Ich habe es geschafft! Ich tat als @DevilSuichiro sagte.Ich entfernte Universität ordnet, dass in Konstruktoren stattfindet und Problem gelöst! Danke für den Rat! Ich werde _Aggragate Root in Domain Driven Design_ lernen, sobald ich kann.Vielen Dank für Ihren Kommentar und Anleitung "** strong butgood **" –