EF核心-映射多对一

时间:2019-02-12 03:03:39

标签: entity-framework entity-framework-core

我正在尝试使用EF核心数据注释在2个表之间创建映射。

所以这是我的示例场景。假设我有包含以下属性的这些类

订单

[Key] 
public int OrderId {get;set}
public string OrderNumber {get;set;}

OrderStatuses

[Key]
public int OrderStatusId {get;set}
public string OrderNumber {get;set;}
public StatusEnum Status {get;set} // Pending, Delivered, Cancel

我有以下示例数据:

OrderId                 OrderNumber // Order Table
1                       11111
2                       11111
3                       11111
4                       22222

OrderStatusId           OrderNumber         Status
1                       11111               Pending
2                       22222               Pending

基本上,我创建了OrderStatuses表来存储OrderNumber的状态,但是它们没有关系,因为我不知道如何使用实体框架核心的数据注释将它们Many-to-One制成而不使用key。我想实现这一目标,因此可以在获取所有信息时使用.Include方法。

关键是,“只有多个订单但只有一个状态”。我希望有人能帮助我。

1 个答案:

答案 0 :(得分:1)

由于您希望在many-to-oneOrder之间使用OrderStatus,因此您似乎错误地配置了模型关系。

因此,您的OrderStatusOrder模型类应如下所示:

public class OrderStatus
{
    [Key]
    public int OrderStatusId { get; set; }
    public StatusEnum Status { get; set; }

    public ICollecton<Order> Orders {get; set;}
}

public class Order
{
    [Key]
    public int OrderId { get; set; }

    public string OrderNumber { get; set; }

    public OrderStautsId {get;; set;}

    public OrderStatus OrderStatus { get; set; }
}