0

다중웨어 하우스 주문에 대한 세부 정보를 저장하는 데 필요한 엔티티가 4 개 있습니다.EF : 복수 열 외래 키

주문 - 주문 헤더.

웨어 하우스 -웨어 하우스의 세부 정보입니다.

OrderLines - 주문에 대한 제품의 세부 정보 (해당웨어 하우스가 속한 항목 포함).

OrderWarehouse - 단일 창고에만 관련된 주문에 대한 세부 정보입니다.

public class Order 
{ 
    public int Id { get; set; } 

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; } 

    public virtual ICollection<OrderLine> OrderLines { get; set; } 
} 

public class Warehouse 
{ 
    public int Id { get; set; } 

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; } 

    public virtual ICollection<OrderLine> OrderLines { get; set; } 
} 

public class OrderLine 
{ 
    public int Id { get; set; } 

    public int OrderId { get; set; } 

    public int ProductId { get; set; } 

    public int WarehouseId { get; set; } 

    [ForeignKey("OrderId")] 
    public virtual Order Order { get; set; } 

    [ForeignKey("WarehouseId")] 
    public virtual Warehouse Warehouse { get; set; } 

    public virtual OrderWarehouse OrderWarehouse { get; set; } // THIS IS WHERE I AM STRUGGLING 
} 

public class OrderWarehouse 
{ 
    [Key, Column(Order = 0)] 
    public int OrderId { get; set; } 

    [Key, Column(Order = 1)] 
    public int WarehouseId { get; set; } 

    [ForeignKey("OrderId")] 
    public virtual Order Order { get; set; } 

    [ForeignKey("WarehouseId")] 
    public virtual Warehouse Warehouse { get; set; } 

    public virtual ICollection<OrderLine> OrderLines { get; set; } // THIS IS WHERE I AM STRUGGLING 
} 

OrderLines와 OrderWarehouse간에 올바르게 정의 된 관계가없는 것 같습니다.

키는 OrderId, WarehouseId로 구성됩니다.

컨텍스트에서 정의해야하지만 모든 시도에서 오류가 발생합니다.

나를 도와 줄 수 있습니까?

편집 :

내가하려고하면이 :

modelBuilder.Entity<OrderLine>() 
.HasOptional(u => u.OrderWarehouse) 
.WithMany() 
.HasForeignKey(u => new { u.OrderId, u.WarehouseId }); 

내가 얻을 :

OrderLine_OrderWarehouse : 역할에 참조 제한 조건 'OrderLine_OrderWarehouse_Target' 관계와 다중성 충돌 ' OrderLine_OrderWarehouse '를 선택하십시오. 종속 역할에있는 모든 속성 은 nullable이 아니므로, 주체 의 다중성은 '1'이어야합니다.

답변

0

유창한 매핑은 거의 정확하지만 nullable 속성에서 선택적 관계를 지정할 수 없습니다. 다음과 같이하면 정상적으로 작동합니다.

modelBuilder.Entity<OrderLine>() 
.HasRequired(u => u.OrderWarehouse) 
.WithMany() 
.HasForeignKey(u => new { u.OrderId, u.WarehouseId });