EF:多列外键

本文关键字:EF | 更新日期: 2023-09-27 18:28:57

我有4个实体需要存储多仓库订单的详细信息。

订单-订单的标题。

仓库-仓库的详细信息。

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"。因为所有的属性Dependent Role中的不可为null,Principal的多重性角色必须为"1"。

EF:多列外键

您拥有的流畅映射几乎是正确的,但您不能在不可为null的属性上指定可选关系,如果您尝试以下操作,它应该会起作用。

modelBuilder.Entity<OrderLine>()
.HasRequired(u => u.OrderWarehouse)
.WithMany()
.HasForeignKey(u => new { u.OrderId, u.WarehouseId });
相关文章:
  • 没有找到相关文章