EF 4.1 Code First的复合键

bug*_*ker 105 composite-key ef-code-first entity-framework-4.1

我试图找出如何使用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; }

}
Run Code Online (Sandbox Code Playgroud)

我需要"ActivityName"也是一个关键.当然,我可以围绕这个编码,但那不是很好的数据库设计.

Lad*_*nka 186

您可以使用注释标记两者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; }

}
Run Code Online (Sandbox Code Playgroud)


tay*_*onr 105

我们不使用注释,而是覆盖模型构建器,在这种情况下,您可以执行以下操作:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法.保持模型清除上下文问题.谢谢. (14认同)
  • 我知道你在寻找注释,但认为这可能有助于搜索...就像我说我们没有使用注释所以我在那里帮助不大...希望你找到答案 (3认同)