以下是我的方案:我有三种实体类型,用户(ID,电子邮件,密码),志愿者(姓名,生日...)和 NonProfit (地址...)。志愿者和非营利者都是用户。
我能够创建三个表,如tbUser,tbVolunteer和tbNonProfit,其中用户拥有主键,志愿者和非营利组织拥有用户的主键/外键(UserID),但我不希望这样。
我的用户不是抽象类。首先,我将创建一个用户,例如Mary,我会说Mary是志愿者类型。下一刻,Mary将登录并完成注册,因此我将在数据库上创建一个志愿者行。
简而言之,我希望志愿者表具有UserID作为外键和VolunteerID(主键),以保持它等于我的工程图,志愿者和非营利组织是用户。我不想要聚合或组合,因为在我的UML志愿者中继承了用户。
我愿意接受建议,谢谢你们
答案 0 :(得分: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