2

我有这些课程

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 表的复合键。

我注意到这里有几个问题谈论多对多关系,但没有一个(我能找到)谈论实体具有额外数​​据的这种关系,例如“答案”。

4

1 回答 1

3

首先,您必须将SecretQuestionIdUserId作为属性添加到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并告诉 Entity Framework 为连接表使用复合键。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Set composite keys
    modelBuilder.Entity<UserSecretQuestion>().HasKey(k => new { k.SecretQuestionId, k.UserID });
}
于 2012-11-23T04:54:30.450 回答