105

EFコードを使用して複合キーを作成する方法を理解しようとしています 最初の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」もキーにする必要があります。確かに、これを回避するためのコーディングはできますが、それは適切なデータベース設計ではありません。

4

2 に答える 2

185

ActivityIDActivityNameプロパティの両方を注釈でマークするKeyか、@taylonr で説明されているように流暢な 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; }

}
于 2011-03-29T06:00:52.497 に答える
105

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

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });
于 2011-03-29T00:15:16.390 に答える