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.
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; } }
We don't use the annotations, instead we override the model builder, in which case you can do something like:
modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With