2017-09-04 212 views
1

使用ASP.NET核心身份與實體框架的核心,我需要在我的應用程序添加不同類型的用戶:不同的用戶類型與ASP.NET 1.1的核心身份和Entity Framework核心

比方說,我需要兩種類型的用戶:「學生」和「老師」;他們都是ApplicationUsers,因爲他們必須通過身份驗證才能訪問應用程序。

我完成了創建兩個表格:一個是學生,一個是老師。這兩個表與ApplicationUser表是一對一的關係。

我想知道這是否正確,或者我做錯了什麼,,因爲當用遷移更新數據庫時,它會在「學生」表中引發錯誤「FOREIGN KEY'FK_Student_AspNetUsers_Id'可能導致週期或多個級聯路徑,指定ON DELETE NO ACTION或UPDATE NO ACTION「。在任何情況下,如果它正確,最後我會有一個ApplicationUser類,它有兩列(一個用於StudentId,另一個用於TeacherId),其中一個將始終爲空,因爲ApplicationUser可以是Student或一位老師,但不是兩個。

這裏是我到目前爲止的代碼:

public class ApplicationUser : IdentityUser<int> 
{ 
    public string Name { get; set; } 

    [ForeignKey("Teacher")] 
    public int? TeacherId { get; set; } 
    public virtual Teacher Teacher { get; set; } 
    [ForeignKey("Student")] 
    public int? StudentId { get; set; } 
    public virtual Student Student { get; set; } 
} 

public class Student 
{ 
    [Key, ForeignKey("User")] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    public string MotherMaidenName { get; set; } 
    public DateTime BirthDate { get; set; } 
    public DateTime EnrollmentDate { get; set; } 

    public virtual ApplicationUser User { get; set; } 
} 

public class Teacher 
{ 
    [Key,ForeignKey("User")] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    public string MotherMaidenNAme { get; set; } 

    public virtual ApplicationUser User { get; set; } 
} 

修訂:我已經設置TeacherId和StudentId爲空的,因此上面提到的錯誤消失。

回答

0

您不應該爲每個用戶類型創建不同的表。 您應該創建角色並將該角色分配給用戶。例如,創建一個角色的學生和角色老師,並根據您的需求分配他們。

所以我會說你所做的不是一個好的設計。

當您需要爲學生/老師保存附加值時,我會做與您的設計類似的工作。 但我不會將我的學生/老師的ID添加到我的ApplicationUser類中。 我只是簡單地將UserId添加到我的學生/教師課程中。 所以設計問題應該是你試圖把這些東西放到ApplicationUser類中。

+0

我同意你的看法,這不是一個好的設計。我已經爲不同的用戶提供了角色,但是我還需要爲他們每個角色提供不同的屬性,我認爲使用ApplicationUser作爲用戶與商業數據庫中的其餘表相關聯也是一個糟糕的設計。 – MorgoZ

+0

例如,學生有出生日期和入學日期,而老師沒有,老師可以有主題。他們有不同的屬性,所以ApllicationUser不是設置所有用戶的類型屬性的地方。 – MorgoZ

+0

我明白你在想什麼。我編輯了我的答案。 – user743414