Error in relationship between two models have more keys in asp.net core 2.1

Discussion in 'ASP.NET / ASP.NET Core' started by ahmedbarbary, Nov 18, 2018.

  1. Problem

    The relationship from 'SalesFooter.SaleHeaders' to 'SalesHeader.SalesFooters'

    with foreign key properties {'SalesOrderNo' : int} cannot target the primary key

    {'SalesOrderNo' : int, 'SalesType' : int, 'SalesYear' : int, 'BranchCode' :

    int} because it is not compatible. Configure a principal key or a set of

    compatible foreign key properties for this relationship.

    Details

    I work in visual studio 2017 asp.net EntityFramework core 2.1 when i make

    relationship between two models SalesHeader and SalesFooter

    SalesHeader Keys : SalesOrderNo , SalesYear ,BranchCode, SalesType(composite keys) SalesFooter Keys :SalesOrderNo , SalesYear ,BranchCode, SalesType,SalesLineNo (composite keys) Code

    Code:
    public class SalesHeader
       {       
    
           public int SalesOrderNo { get; set; }
    
    
           public int SalesYear { get; set; }
    
    
           public int BranchCode { get; set; }
    
    
           public int SalesType { get; set; }
           [Required]
    
           public DateTime SalesDate { get; set; }
           public ICollection<SalesFooter> SalesFooters { get; set; }
    
    }
     public class SalesFooter
       {
    
    
    
    
           public int SalesOrderNo { get; set; }
    
            public int SalesYear { get; set; }
    
            public int BranchCode { get; set; }
    
            public int SalesType { get; set; }
    
           public int SalesLineNo { get; set; }
           [Required]
    
           public DateTime SalesDate { get; set; }
           [DataType("decimal(18 ,2")]
           public decimal Quantity { get; set; }
           [DataType("decimal(18 ,2")]
           public decimal UnitPrice { get; set; }
           [DataType("decimal(18 ,2")]
           public decimal Total { get; set; }
    
    
           public SalesHeader SaleHeaders{ get; set; }
       }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
           {
               base.OnModelCreating(modelBuilder);
    
    
    
               modelBuilder.Entity<SalesHeader>()
                   .HasKey(t => new { t.SalesOrderNo,t.SalesType,t.SalesYear,t.BranchCode });
               modelBuilder.Entity<SalesFooter>()
                   .HasKey(t => new { t.SalesOrderNo, t.SalesType, t.SalesYear, t.BranchCode,t.SalesLineNo}); 
               modelBuilder.Entity<SalesFooter>()
                        .HasOne(e => e.SaleHeaders)
                        .WithMany(e => e.SalesFooters)
                        .HasForeignKey(e => e.SalesOrderNo);
    
    
    
           } 
    How to make relation between two models based on keys above ?

    SampleData

    SalesHeader Table
    SalesOrderNo SalesYear BranchCode SalesType CustomerID
    50 2018 1 1 20
    SalesFooter Table
    SalesOrderNo SalesLineNo SalesYear BranchCode SalesType ItemCode
    50 1 2018 1 1 1001
    50 2 2018 1 1 1002
    50 3 2018 1 1 1003
     

Share This Page