2012-11-23 56 views
2

我有這些類實體框架5,代碼第一次多對多外鍵映射有額外的屬性

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

我注意到這裏有幾個關於多對多關係的問題,但沒有一個(我可以找到)討論這種關係,其中實體有額外的數據,例如'回答'。

回答

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; } 
} 

你就必須重寫你的DbContextOnModelCreating方法,並告訴實體框架使用組合鍵連接表。

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

我會在星期一檢查它,當我回去工作時......看起來正確,雖然感謝 – Peter

+0

我並不需要數據註釋。 –

相關問題