105

我试图弄清楚如何使用 EF 代码 First 4.1 RC 来获得复合键。

目前,我正在使用 [Key] Data Annotation,但我无法指定多个键。

如何指定一个复合键?

这是我的例子:

 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 回答