How to Specify Primary Key Name in EF-Code-First How to Specify Primary Key Name in EF-Code-First sql-server sql-server

How to Specify Primary Key Name in EF-Code-First


If you want to specify the column name and override the property name, you can try the following:

Using Annotations

public class Job{    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]    [Column("CustomIdName")]    public Guid uuid { get; set; }    public int active { get; set; }}

Using Code First

    protected override void OnModelCreating(DbModelBuilder mb)    {        base.OnModelCreating(mb);        mb.Entity<Job>()            .HasKey(i => i.uuid);        mb.Entity<Job>()          .Property(i => i.uuid)          .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)          .HasColumnName("CustomIdName");    }

Inside Migration Configuration

public partial class ChangePrimaryKey : DbMigration{    public override void Up()    {        Sql(@"exec sp_rename 'SchemaName.TableName.IndexName', 'New_IndexName', 'INDEX'");    }    public override void Down()    {        Sql(@"exec sp_rename 'SchemaName.TableName.New_IndexName', 'Old_IndexName', 'INDEX'");    }}


You can use the Key attribute to specify the parts of the primary key. So your Job class might be

public class Job{    [Key]    public Guid uuid{ get; set; }    public int active{ get; set; }}

The data annotation attributes are defined in the System.ComponentModel.DataAnnotations namespace


If I understand, you are asking how to change the name of the primary key column used by Entity Framework. The following addition to your HasKey statement should take care of this:

modelBuilder.Entity<Job>().Property(j => j.uuid).HasColumnName("pk_Jobs")