简体   繁体   English

EF:多列外键

[英]EF: Multiple column foreign keys

I have 4 entities that are needed to store details about a multi-warehouse order. 我有4个实体,用于存储有关多仓库订单的详细信息。

Order - The header of the order. 订单-订单的标题。

Warehouse - The details of the warehouse. 仓库-仓库的详细信息。

OrderLines - The detail about the product against the order (including which warehouse its belongs to). OrderLines-有关订单的产品的详细信息(包括其所属的仓库)。

OrderWarehouse - The detail about the order relating only to a single warehouse. 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
}

I can't seem to get the relationship defined correctly between the OrderLines and OrderWarehouse. 我似乎无法正确地定义OrderLines和OrderWarehouse之间的关系。

The key is made up of OrderId, WarehouseId. 密钥由OrderId,WarehouseId组成。

I know this needs to be defined in the context but all my attempts throw errors. 我知道这需要在上下文中定义,但是我的所有尝试都将引发错误。

Can someone please assist me? 有人可以帮我吗?

Edit: 编辑:

If I try this: 如果我尝试这样做:

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

I get: 我得到:

OrderLine_OrderWarehouse: : Multiplicity conflicts with the referential constraint in Role 'OrderLine_OrderWarehouse_Target' in relationship 'OrderLine_OrderWarehouse'. OrderLine_OrderWarehouse::多重性与关系'OrderLine_OrderWarehouse'中的角色'OrderLine_OrderWarehouse_Target'中的引用约束冲突。 Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'. 因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为'1'。

The fluent mapping you have is almost correct, but you can't specify an optional relationship on non nullable properties, if you try the following it should work. 您拥有的流利映射几乎是正确的,但是如果尝试以下操作,则不能在不可为空的属性上指定可选关系。

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