2013-12-16 134 views
1

我需要幫助的設計問題。最好用一個例子來描述。 使用下面的域模型: - 學生 - 報名 - 課程查看模型設計的領域模型多對多關係

如果學生和課程有一個多對多的關係彼此,由報名表實現的,即招生有StudentID(FK)和CourseID (FK)。 學生和課程都有導航屬性,即另一個導航屬性。

我使用查看模型,並希望簡單的CRUD功能,添加,編輯,刪除學生和課程。 View模型與其相關的Domain模型非常相似。

要顯示學生的詳細信息很簡單,但是當顯示學生的課程信息時,哪種下面的設計會是最好的方法?

  1. 在Student View模型中,聲明註冊域模型的ICollection? 然後在視圖中可以訪問註冊詳細信息。 我覺得好像這樣就解除了View模型試圖實現的功能,那就是從領域模型中提取一個抽象層。使用這種設計,可以通過學生視圖模型從視圖訪問註冊域模型。

  2. 爲Enrollment類創建View模型。 這將與其域模型相同。除View Model中的域模型的值之外,不會執行其他任何操作。必須通過AutoMapper進行映射。不知道該怎麼做,感覺效率低下。

回答

2

首先,Enrollment不應該是域模型。 Enrollment只是一個數據庫表,它指定從Student s到Course s之間的多對多關係。

我的建議是在Student域模型創建CourseList一個S,並使用NHibernateFluent NHibernate映射StudentCourse,然後創建映射一個多一對多的關係,你可以簡單地檢索來自Student實例的Course

另外,使用映射代替在代碼中寫入某些SQL語句時,可以更自由地使用級聯操作。

+0

是的,很好,謝謝。我明白了爲什麼我不需要註冊視圖模型。另外,我正在使用實體框架,現在已經正確地閱讀了導航屬性和Fluent API。我瞭解如何創建外鍵關聯(通過類中的FK)和獨立關聯(通過導航屬性)。 –

+0

@ThomasVeil如果是這種情況,我會將'Enrollment'表映射到一個Domain Model中。請檢查[此答案](http://stackoverflow.com/a/5543702/1831275)以查看如何在EF中執行映射 – albusshin