ahmed_sa Ответов: 1

Ошибка в отношениях между двумя моделями имеет больше ключей в 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

1 Ответов

Рейтинг:
0

Sk Imad

Если вы хотите получить связь с обоими классами, имя свойства не должно быть одинаковым в обоих классах.