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.

Answers


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

Need Your Help

C# Target="_blank" in a LinkButton

c# target linkbutton

is it possible to have a target="_blank" in LinkButton...mine doesnt seem to be working

Angular url plus sign converting to space

javascript angular url

I have angular application where i want to pass plus sign + in query string like: