Click here to Skip to main content
15,891,943 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
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

C#
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 ?

HTML
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


What I have tried:

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
Posted

1 solution

If you want to get relation with both class, the property name should not be same in both class.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900