EF 4.1代码优先的复合钥匙

我想弄清楚如何使用EF代码First 4.1 RC的复合键。

目前,我正在使用[Key]数据注释,但我无法指定多个键。

如何指定一个复合键?

这是我的例子:

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; } } 

我需要“活动名称”也是一个关键。 当然,我可以对此进行编码,但那不是很好的数据库devise。

2 Solutions collect form web for “EF 4.1代码优先的复合钥匙”

您可以使用Key注释标记ActivityIDActivityName属性,也可以使用@taylonr描述的stream畅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; } } 

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

 modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName }); 
  • 代码优先与模型/数据库优先
  • entity framework代码首先定义关系/键
  • EF ICollection Vs List Vs IEnumerable Vs IQueryable
  • 如何从代码检索数据注释? (编程)
  • 为什么在EF 4.1中插入实体与ObjectContext相比如此之慢?
  • 保存不会为其关系公开外键属性的实体时发生错误
  • 首先使用EF代码的唯一键
  • 如何在entity framework中包含子对象的子对象5
  • ADO.NET DbContext生成器与ADO.NET Poco实体生成器(ObjectContext)
  • 多个主键与asp .net mvc 3
  • entity framework:查询子实体