C # Problema di modellazione della classe Many-to-Many
-
06-07-2019 - |
Domanda
Ricorda che non sto usando nessuno strumento ORM. Ho appena scritto un semplice codice ado.net per classi e metodi che sembrano esattamente i seguenti. E sto mantenendo anche gli ID.
Supponi di avere tre tabelle Teacher
, Course
e CourseTeacher
(join table) per una relazione Many-to-Many e ho progettato le mie lezioni di conseguenza.
Ora supponiamo che inizialmente tutte le tabelle siano vuote .
E sto eseguendo il seguente codice per la prima volta .
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();
Come devo gestire questa situazione nel mio codice?
Devo semplicemente lanciare un'eccezione per dire che Course
- la tabella non ha dati?
Oppure, popolare contemporaneamente le tabelle Corso
, Insegnante
e CourseTeacher
per mantenere la coerenza dei dati?
La seconda opzione è effettivamente possibile (Coz, poiché la tabella Course
non ha dati, il programma che tenta di inserire i dati in CourseTable
genererà un'eccezione del database )?
Soluzione
Questo dipenderà interamente dalle regole di business per l'applicazione.
Se le regole aziendali per l'applicazione affermano che i nuovi corsi vengono inseriti nel database quando vengono creati, la cosa logica da fare è probabilmente qualcosa del genere:
Course java = new Course();
java.CourseName = "Java";
java.SaveOrUpdate();
Se, d'altra parte, le regole aziendali stabiliscono che tutti i corsi devono esistere prima di essere utilizzati, è probabile che la cosa giusta da fare sia (A) generare un'eccezione e lasciare che sia il chiamante a gestirla, oppure (B ) rileva la situazione e gestiscila tu stesso (possibilmente accedendo e lanciando).
Ancora una volta, dipende dai requisiti.
Altri suggerimenti
Perché non creare un CourseCatalog Type e aggiungere prima nuovi corsi prima di assegnare gli insegnanti a quei corsi?