C # Many-to-Many-Klasse Modellierung Problem
-
06-07-2019 - |
Frage
Bitte beachten Sie, dass ich kein ORM-Tool verwenden. Ich habe einfach nur ado.net Code für Klassen geschrieben und Methoden aussehen wie genau die folgende. Und ich bin Aufrechterhaltung IDs auch.
Angenommen, ich habe drei Tabellen Teacher
, Course
und CourseTeacher
(Join-Tabelle) für eine Many-to-Many-Beziehung, und ich habe meine Klassen entsprechend ausgelegt.
Nun nehmen wir zunächst alle Tische sind leer .
Und ich bin Ausführung des folgenden Code zum ersten Mal .
Course cpp = new Course();
cpp.CourseName = "CPP";
Course java = new Course();
java.CourseName = "Java";
Course cs = new Course();
cs.CourseName = "CS";
Teacher t1 = new Teacher();
t1.TeacherName = "ttt";
t1.AddCourse(cpp);
t1.AddCourse(java);
t1.AddCourse(cs);
t1.SaveOrUpdate();
Teacher t2 = new Teacher();
t2.TeacherName = "ppp";
t2.AddCourse(cpp);
t2.AddCourse(java);
t2.AddCourse(cs);
t2.SaveOrUpdate();
Teacher t3 = new Teacher();
t3.TeacherName = "mmm";
t3.AddCourse(cpp);
t3.AddCourse(java);
t3.AddCourse(cs);
t3.SaveOrUpdate();
Wie soll ich diese Situation in meinem Code umgehen?
Soll ich werfe nur eine Ausnahme, dass Course
zu sagen - Tabelle hat noch keine Daten?
Oder gleichzeitig bevölkert Course
, Teacher
und CourseTeacher
Tabellen Datenkonsistenz zu halten?
Ist die zweite Option tatsächlich möglich ist (Coz, da Course
Tabelle keine Daten hat, das Programm versucht, Daten in CourseTable
eingeben wird eine Datenbank Ausnahme auslösen)?
Lösung
Dies wird für die Anwendung ganz auf die Geschäftsregeln ab.
Wenn die Geschäftsregeln für die Anwendung Staat, neue Kurse in die Datenbank eingefügt werden, wenn sie erstellt werden, dann ist die logische Sache zu tun ist wahrscheinlich so etwas wie folgt aus:
Course java = new Course();
java.CourseName = "Java";
java.SaveOrUpdate();
Wenn auf der anderen Seite die Geschäftsregeln fest, dass alle Kurse vor existieren muss verwendet werden, dann ist die richtige Sache zu tun ist wahrscheinlich entweder (A) eine Ausnahme aus, und lassen Sie den Anrufer damit umgehen, oder (B ), um die Situation zu erkennen und es sich (möglicherweise durch die Protokollierung und werfen) zu behandeln.
Auch hier hängt es von den Anforderungen ab.
Andere Tipps
Warum nicht ein CourseCatalog Typ machen und zuerst es neue Kurse anhängen, bevor Lehrer die Kurse zuweisen?