Search code examples
ef-code-firstcomposite-keyentity-framework-4.1

Composite Key with EF 4.1 Code First


I am trying to figure out how to have a composite key using EF code First 4.1 RC.

Currently, I am using the [Key] Data Annotation, but I am unable to specify more than one key.

how would one specify a composite key?

Here is my Example:

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

}

I need the "ActivityName" to also be a key. Sure, I can code around this, but thats not good database design.


Solution

  • You can mark both ActivityID and ActivityName properties with Key annotation or you can use fluent API as described by @taylonr.

    Edit:

    This should work - composite key defined with annotations requires explicit column order:

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