繁体   English   中英

EF:多列外键

[英]EF: Multiple column foreign keys

我有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'中的角色'OrderLine_OrderWarehouse_Target'中的引用约束冲突。 因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为'1'。

您拥有的流利映射几乎是正确的,但是如果尝试以下操作,则不能在不可为空的属性上指定可选关系。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM