1

這裏是我的情況:我有三個實體類型,用戶(ID,電子郵件,密碼),志願者(姓名,出生日期等)和非營利(地址...) 。志願者和非盈利都是用戶。實體框架繼承複合鍵

我能夠創建三個表,如tbUser,tbVolunteer和tbNonProfit,其中用戶有一個主鍵,志願者和非營利組織擁有用戶(用戶ID)的主/外鍵,但我不想要這樣。

我的用戶不是抽象類。首先,我將創建一個用戶,例如Mary,我會說Mary是一名志願者。接下來,瑪麗將登錄並完成註冊,因此我將在數據庫上創建一個志願者行。

簡而言之,我希望志願者表將UserID作爲外鍵和VolunteerID(主鍵),以保持它等於我的工程圖,其中志願者和非營利組織是用戶。因爲在我的UML志願者從用戶身上繼承,所以我不想要一個遺憾或者組合。

我開放的建議,感謝你們

+0

有你的'Volunteer'臺獨立的外交和主鍵將有效地使一個一對一很多關係,(用戶可能是很多不同的志願者)。我不確定你可以使用繼承來實現這一點。 – user2697817

回答

1

實現這個是不是有另一個主鍵的正確方法。實施看起來是這樣的:

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 

    public string Email{ get; set; } 
    public string Password { get; set; } 
} 

[Table("Volunteer")] 
public class Volunteer : User 
{ 
    public DateTime BirthDate { get; set; } 
} 

[Table("NonProfit")] 
public class NonProfit: User 
{ 
    public string Address { get; set; } 
} 

public class MyContext: DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Volunteer> Volunteers { get; set; } 
    public DbSet<NonProfit> NonProfits { get; set; } 
} 

欲瞭解更多信息,看看這篇文章:http://www.codeproject.com/Articles/796521/Inheritance-in-Entity-Framework-Table-Per-Type

+0

感謝您的回答和鏈接。我正走在這條路上。通過這種方式,我可以實現我想要的,現在我明白它是如何工作的。我只有一個問題。例如,我不是創建一個用戶,而是在NonProfit上創建一個志願者,它將自動創建用戶。問題是志願者稍後會提供他的個人資料,所以我必須提供空值,因爲有些字段是必需的。 – Murilo

+0

正如你可以看到這個答案http://stackoverflow.com/questions/3823662/changing-inherited-types-in-entity-framework這是不可能開箱即用。您可以使用該問題的答案。另一種方法是在User實體中將所有附加字段設置爲可選的,只需要一個類型枚舉而不是真正的繼承。 –

+0

是的,我讀了提供的答案。他們談論使用組合或存儲過程。因爲我想保留繼承,所以我可能會使用存儲過程來避免周圍的工作,比如爲Volunteer設置空值。因此,將創建用戶「125」,然後當他填寫剩餘的數據時,我將通過存儲過程創建志願者「125」。謝謝 – Murilo