2009-10-24 62 views
0

請記住,我沒有使用任何ORM工具。我剛剛寫了純ado.net代碼的類和方法看起來像下面。而且我也維護ID。C#多對多類建模問題

假設我有三個表Teacher,CourseCourseTeacher(連接表)的多對多關係,我設計了我的類相應。

現在,假設最初所有的表都是空的

我正在執行以下代碼第一次

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 - 表沒有任何數據嗎?

或者,同時填充CourseTeacherCourseTeacher表保持數據一致性?

第二個選項實際上是可能的(因爲Course表沒有任何數據,程序試圖在CourseTable中輸入數據會拋出數據庫異常)?

+0

而你正在使用NHibernate? – chakrit 2009-10-24 03:16:06

+0

不,先生。我沒有使用任何ORM工具。 – anonymous 2009-10-24 03:17:51

+0

您在C#程序中使用標識符名稱java。那裏值得點,因爲有太多沒有說服力。 – 2009-10-24 03:21:12

回答

2

這完全取決於應用程序的業務規則。

如果新的課程被插入到它們在創建時的數據庫應用程序狀態的業務規則,然後做順理成章的事情可能是這樣的:

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

如果,另一方面,業務規則規定所有課程在使用之前必須存在,那麼正確的做法可能是(A)拋出異常並讓調用者處理它,或(B)檢測情況並自己處理(可能通過記錄和投擲)。

同樣,這取決於要求。

-1

爲什麼不讓CourseCatalog在給教師分配這些課程之前先鍵入並添加新課程?

+0

建議的CourseCatalog類型可以代表課程表,它的.SaveOrUpdate()方法將導致它被填充。當老師上課時,不必再擔心該怎麼做,因爲它已經在課程表中。 – 2009-10-24 03:41:09