質問
ORMツールを使用していないことに注意してください。クラスとメソッドのado.netコードを次のように記述しました。また、IDも管理しています。
多対多の関係のために、3つのテーブル Teacher
、 Course
、および CourseTeacher
(join table)があり、設計したとしますクラスに応じて。
今、最初はすべてのテーブルが空ですと仮定します。
そして、初めて次のコードを実行しています。
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
、 Teacher
、および CourseTeacher
テーブルを同時に作成して、データの一貫性を維持しますか?
2番目のオプションは実際に可能ですか(Coz、 Course
テーブルにはデータがないため、 CourseTable
にデータを入力しようとするプログラムはデータベース例外をスローします)?
解決
これは、アプリケーションのビジネスルールに完全に依存します。
アプリケーションのビジネスルールで、作成時に新しいコースがデータベースに挿入されると記載されている場合、論理的なことは次のようになります。
Course java = new Course();
java.CourseName = "Java";
java.SaveOrUpdate();
一方、ビジネスルールで、使用する前にすべてのコースが存在する必要があると規定されている場合、適切なことは、(A)例外をスローして呼び出し元に処理させるか、(B )状況を検出し、自分で処理します(場合によっては、ログ記録とスローによって)。
これも要件に依存します。
他のヒント
CourseCatalogタイプを作成し、新しいコースを最初に追加してから、教師をそれらのコースに割り当てるのはなぜですか?