How to add a composite unique key using EF 6 Fluent Api?

后端 未结 2 1690
予麋鹿
予麋鹿 2020-12-31 05:52

I have a table (Id, name, itemst, otherproperties), Id is the primary key and I want a unique composite key (name, itemst). How can I add this using code first either by flu

相关标签:
2条回答
  • 2020-12-31 06:23

    Let say you have a entity named

    public class MyTable
    {
        public int Id {get; set;}
        public String Name {get; set;}
    
    }
    

    you can create composite key using

    public class YourContext : DbContext
    {
        public DbSet<MyTable> MyTables { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder builder)
        {
            builder.Entity<MyTable>().HasKey(table => new {table.Id, table.Name});
        }
    }
    

    if you prefer data annotation you can simple add KeyAttribute to multiple properties

    public class MyTable
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  // optional
        [Key]
        public int Id { get; set; }
    
        [DatabaseGenerated(DatabaseGeneratedOption.None)]   // optional
        [Key]
        public String Name { get; set; }
    
    }
    
    0 讨论(0)
  • 2020-12-31 06:37

    Here is an example showing how to create a composite unique key via fluent API. The composite key consists of ProjectId and SectionOdKey.

    public class Table
    {
        int Id{set;get;}    
        int ProjectId {set;get;}
        string SectionOdKey{set;get;}
    }
    
    public class TableMap : EntityTypeConfiguration<Table>
    {
       this.Property(t => t.ProjectId).HasColumnName("ProjectId")
                    .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_ProjectSectionOd", 1){IsUnique = true}));
       this.Property(t => t.SectionOdKey).HasColumnName("SectionOdKey")
                    .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_ProjectSectionOd", 2){IsUnique = true}));
    }
    
    0 讨论(0)
提交回复
热议问题