0

我是一位經驗豐富的.NET開發人員,但對EF來說是新手 - 所以請耐心等待。我將用一個大學申請的例子來說明我的問題。我有這些用戶角色:關於實體框架中的實體,角色和接口的問題4

講師,學生,管理員。

在我的代碼中,我設想將這些實體作爲不同的類來處理,例如,一位講師教授一批學生。並且與'學生''TypeOf'一起工作等。

這些實體中的每一個共享許多共同的屬性/方法,例如他們都可以登錄系統並做與他們角色相關的東西。

在EF設計師中,我可以創建一個基本實體Person(或User ...)並讓講師,學生和管理員都從中繼承。

我遇到的困難是,講師可以成爲管理員 - 事實上有時學生可以成爲講師。

如果我要添加其他實體,例如Employee和Warden,那麼這會導致更多的問題。

我大概可以與Interfaces一起工作,這樣一個人就可以實現ILecturer和IStudent,但是我不明白這是如何適合EF的。

我想在EF設計師的工作,如果可能的話,我正在模型優先(用C#編碼)。

因此,任何幫助和建議/樣品將非常歡迎和非常感謝。

感謝

回答

0

不要StudentPersonLecturer繼承。正如你所說,如果「鮑勃」既是學生又是講師?在真實的大學裏,一直是。你最好自己說:這些是角色,不是類型。一個人可以有很多角色。作爲一個經驗法則,當它不是絕對必要時(幾乎從不),在O/R映射中避免繼承。就像編碼時一樣,贊成繼承的構成。

所以,你可以每個Person屬性Roles這是一個0 .. *收藏Role秒。然後讓學生的名單,你可以這樣做:

var students = from p in Context.People 
       where p.Roles.Any(r => r.Id = studentRoleId) 
       select p; 

或者你可以有一個相關的Student型與PersonStudent之間的0..1關係;這將允許你爲學生添加額外的數據,例如:

var students = from p in Context.People 
       where p.StudentInfo != null 
       select new 
       { 
        Id = p.Id, 
        Name = p.Name, 
        Grades = p.Student.Grades 
       }; 
+0

嗨克雷格,這是非常有益的感謝!我正在考慮一個基於人物角色(多對多)和相關配置文件的模型,因此擔任學生角色的人也有相關的學生配置文件。似乎工作得很好。再次感謝。 – mvole 2010-05-15 08:26:29