Entity Framework Code First Using One column as Primary Key and another as Auto Increment Column

前端 未结 4 1897
挽巷
挽巷 2020-12-09 15:08

I have a class named Sale

public class Sale
{
    public int Id { get; set; }
    public string TrNo { get; set; }
    public DateTime Date          


        
相关标签:
4条回答
  • 2020-12-09 15:45

    I believe you can do this using Fluent API

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Sale>().Property(a => a.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        modelBuilder.Entity<Sale>().Property(a => a.TrNo).HasKey(b => b.TrNo);
    }
    
    0 讨论(0)
  • 2020-12-09 16:01

    This helped me. Hope this helps anyone else that still looking around

    public class Sale
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//switch on autogenerated
            public int Id { get; set; }
    
            [Key]//set as Primary key
            [DatabaseGenerated(DatabaseGeneratedOption.None)]// switch off autogenerated PK
            public string TrNo { get; set; }
    
            public DateTime Date { get; set; }
            public int CustomerID { get; set; }
    
            public ObservableCollection<SaleDetail> SaleDetails { get; set; }
    }
    
    0 讨论(0)
  • 2020-12-09 16:07

    You can also do this with Data Annotations:

    public class Sale
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
    
        [Key]
        public string TrNo { get; set; }
    
        public DateTime Date { get; set; }
        public int CustomerID { get; set; }
    
        public ObservableCollection<SaleDetail> SaleDetails { get; set; }
    }
    
    0 讨论(0)
  • 2020-12-09 16:07

    Apparently the answer of @IronMan84 correct. But it didn't work for me. I slightly modified it to apply my another condition. And it worked. I did nothing else.

    This is my solution.

    public class Sale
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
    
        [Key, Column(TypeName = "varchar"), MaxLength(50)]
        public string TrNo { get; set; }
    
        public DateTime Date { get; set; }
        public int CustomerID { get; set; }
    
        public ObservableCollection<SaleDetail> SaleDetails { get; set; }
    }
    

    Unfortunately I can't make the answer of @IronMan84 as the correct one as it didn't work for me.

    0 讨论(0)
提交回复
热议问题