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

最初に、プロパティとしてクラスにSecretQuestionIdandを追加する必要があります。UserIdUserSecretQuestion

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 に答える