Проблема моделирования класса «многие ко многим» - PullRequest
0 голосов
/ 24 октября 2009

Пожалуйста, помните, что я не использую какой-либо инструмент ORM. Я только что написал простой код ado.net для классов и методов, которые выглядят следующим образом. И я также поддерживаю идентификаторы.

Предположим, у меня есть три таблицы Teacher, Course и CourseTeacher (таблица соединений) для отношения "многие ко многим", и я разработал свои классы соответственно.

Теперь предположим, что изначально все таблицы пусты .

И я впервые выполняю следующий код .

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();

Как мне справиться с этой ситуацией в моем коде?

Должен ли я просто сгенерировать исключение, чтобы сказать, что Course - в таблице нет данных?

Или одновременно заполнять таблицы Course, Teacher и CourseTeacher для обеспечения согласованности данных?

Возможен ли второй вариант (Coz, поскольку в таблице Course нет данных, программа, пытающаяся ввести данные в CourseTable, выдаст исключение базы данных)?

Ответы [ 2 ]

2 голосов
/ 24 октября 2009

Это будет полностью зависеть от бизнес-правил для приложения.

Если бизнес-правила для приложения устанавливают, что новые курсы вставляются в базу данных при их создании, то вполне логично сделать что-то вроде этого:

Course java = new Course();
java.CourseName = "Java";
java.SaveOrUpdate();

Если, с другой стороны, бизнес-правила гласят, что все курсы должны существовать до их использования, то, вероятно, следует либо (A) вызвать исключение и позволить вызывающему его обработчику, либо (B ) определить ситуацию и разобраться с ней самостоятельно (возможно, войдя в систему и бросив).

Опять же, это зависит от требований.

0 голосов
/ 24 октября 2009

Почему бы не создать CourseCatalog Type и добавить в него новые курсы, прежде чем назначать учителей для этих курсов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...