0

Hi I have a problem with relationship between my tables. When i try to get values from table i have an error:

OrderDetails_Order_Target_OrderDetails_Order_Source: : The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical. OrderDetails_Processor_Source: : Multiplicity is not valid in Role 'OrderDetails_Processor_Source' in relationship 'OrderDetails_Processor'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'. OrderDetails_Processor_Target_OrderDetails_Processor_Source: : The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical.

My classes and relationship look that:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Users>().HasKey(x => x.ID_User);
        modelBuilder.Entity<Processor>().HasKey(x => x.Product_ID);
        modelBuilder.Entity<GPU>().HasKey(x => x.Product_ID);
        modelBuilder.Entity<Orders>().HasKey(x => new { x.Order_ID, x.User_ID });
        modelBuilder.Entity<OrderDetails>().HasKey(x => new { x.Order_ID, x.Product_ID });

        modelBuilder.Entity<OrderDetails>().HasRequired(x => x.Processor).WithMany(x => x.OrderDetails).HasForeignKey(x => new { x.Product_ID, x.Order_ID });
        modelBuilder.Entity<OrderDetails>().HasRequired(x => x.GPU).WithMany(x => x.OrderDetails);
        modelBuilder.Entity<OrderDetails>().HasRequired(x => x.Order).WithMany(x => x.OrderDetails);

        modelBuilder.Entity<Orders>().HasMany(x => x.OrderDetails).WithRequired(x => x.Order);
        modelBuilder.Entity<Orders>().HasRequired(x => x.User).WithMany(x => x.Orders);

        modelBuilder.Entity<Processor>().HasMany(x => x.OrderDetails).WithRequired(x => x.Processor).HasForeignKey(x => new { x.Product_ID, x.Order_ID });
        modelBuilder.Entity<GPU>().HasMany(x => x.OrderDetails).WithRequired(x => x.GPU);

        modelBuilder.Entity<Users>().HasMany(x => x.Orders).WithRequired(x => x.User);
    }

public class OrderDetails
{
    public int Order_ID { get; set; }
    public int Product_ID { get; set; }
    public int Quantity { get; set; }
    [ForeignKey(nameof(Product_ID))]
    public Processor Processor { get; set; }
    [ForeignKey(nameof(Product_ID))]
    public GPU GPU { get; set; }
    [ForeignKey(nameof(Order_ID))]
    public Orders Order { get; set; }
}
public class Processor
{
    [Key]
    public int Product_ID { get; set; }
    public string Title { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }
    public ICollection<OrderDetails> OrderDetails { get; set; }
}

And here i get an error

public class EfProcessorContext : IProcessorRepository
{
    private EfDbContext context = new EfDbContext();

    public IEnumerable<Processor> Processors
    {
        get
        {
            return context.Processors.Include(x => x.OrderDetails);
        }
    }
}

What wrong I do?

Selim Yildiz
  • 5,254
  • 6
  • 18
  • 28
Wiktor9696
  • 27
  • 1
  • 7