Ошибка в отношениях между двумя моделями имеет больше ключей в ASP.NET ядро 2.1
Проблема
Отношения из " SalesFooter.SaleHeaders' to 'SalesHeader.Коммивояжеры'
с помощью свойств внешнего ключа {'SalesOrderNo' : int} невозможно настроить таргетинг на первичный ключ
{'SalesOrderNo' : int, 'SalesType' : int, 'SalesYear' : int, 'BranchCode' :
int}, потому что он не совместим. Настройка основного ключа или набора
совместимые свойства внешнего ключа для этой связи.
Подробности
Я работаю в visual studio 2017 asp.net EntityFramework core 2.1 когда я делаю
взаимосвязь между двумя моделями SalesHeader и SalesFooter
Ключи SalesHeader : SalesOrderNo , SalesYear ,BranchCode, SalesType(составные ключи)
Ключи SalesFooter :SalesOrderNo , SalesYear ,BranchCode, SalesType,SalesLineNo (составные ключи) Код
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); }
Как установить связь между двумя моделями на основе приведенных выше ключей ?
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
Что я уже пробовал:
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