簡體   English   中英

Entity Framework 5,Code First 多對多外鍵映射,具有額外的屬性

[英]Entity Framework 5, Code First Many to Many foreign key mapping with extra property

我有這些課

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 表的復合鍵。

我注意到這里有幾個問題討論了多對多關系,但沒有一個(我可以找到)討論實體具有額外數​​據的這種關系,例如“答案”。

首先,您必須將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; }
}

然后,您必須覆蓋DbContext類中的OnModelCreating方法,並告訴實體框架對連接表使用復合鍵。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Set composite keys
    modelBuilder.Entity<UserSecretQuestion>().HasKey(k => new { k.SecretQuestionId, k.UserID });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM