我有这些课程
public class SecretQuestion
{
[Key]
public int SecretQuestionId { get; set; }
[Required]
public string Caption { get; set; }
}
public class UserSecretQuestion
{
public SecretQuestion SecretQuestion { get; set; }
public User User { get; set; }
[Required]
public string Answer { get; set; }
}
public class User
{
[Key]
public int UserId { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
}
我希望UserSecretQuestion成为一个包含用户答案的连接表。问题是EF5不会为我创建这个表,因为它声称我需要该表上的一个键。
所以当然把 public int Id {get;组; } 在那里会修复它但是会在我的数据库中放置一个我不需要的字段。
是否有办法使此工作正常,以便secretquestionid和userid外键形成usersecretquestion表的复合键。
我注意到这里有几个问题,谈论多对多的关系,但没有(我能找到的)谈论这种关系,其中实体有额外的数据,例如'回答'。
答案 0 :(得分:3)
首先,您必须将SecretQuestionId
和UserId
作为属性添加到UserSecretQuestion
类。
public class UserSecretQuestion
{
[Key, ForeignKey("SecretQuestion")]
public int SecretQuestionId { get; set; }
[Key, ForeignKey("User")]
public int UserId { get; set; }
[Required]
public string Answer { get; set; }
public SecretQuestion SecretQuestion { get; set; }
public User User { get; set; }
}
然后,您必须覆盖OnModelCreating
类中的DbContext
方法,并告诉实体框架使用复合键作为连接表。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Set composite keys
modelBuilder.Entity<UserSecretQuestion>().HasKey(k => new { k.SecretQuestionId, k.UserID });
}