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
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
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