web-dev-qa-db-ja.com

EF 4.1 Code Firstの複合キー

EFコードFirst 4.1 RCを使用して複合キーを取得する方法を見つけようとしています。

現在、[キー]データアノテーションを使用していますが、複数のキーを指定することはできません。

複合キーをどのように指定しますか?

これが私の例です:

 public class ActivityType
{
    [Key]
    public int ActivityID { get; set; }

    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

「ActivityName」もキーにする必要があります。確かに、私はこの周りにコーディングできますが、それは良いデータベース設計ではありません。

104
bugnuker

ActivityIDプロパティとActivityNameプロパティの両方にKey注釈を付けるか、@ taylonrで説明されているFluent APIを使用できます。

編集:

これは機能するはずです-アノテーションで定義された複合キーには、明示的な列順序が必要です:

public class ActivityType
{
    [Key, Column(Order = 0)]
    public int ActivityID { get; set; }

    [Key, Column(Order = 1)]
    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}
186
Ladislav Mrnka

注釈は使用せず、代わりにモデルビルダーをオーバーライドします。この場合、次のようなことができます。

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });
105
taylonr