实体框架几个具有相同模型的一对多

时间:2018-07-12 16:03:13

标签: asp.net-mvc entity-framework one-to-many

我的Order

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

        (...)

        [ForeignKey("Client")]
        public string ClientID { get; set; }
        public virtual ApplicationUser Client { get; set; }

        [ForeignKey("Trader")]
        public string TraderID { get; set; }
        public virtual ApplicationUser Trader { get; set; }

        [ForeignKey("Driver")]
        public string DriverID { get; set; }
        public virtual ApplicationUser Driver { get; set; }
    }

还有我的MS Identity ApplicationUser类:

public class ApplicationUser : IdentityUser
    {
        (...)
        public virtual List<Order> Orders { get; set; }
    }

如您所见,我希望在Order模型的特定“角色”中拥有特定用户。我应该如何在ApplicationUser中编写代码以获取客户,商人和驱动程序的详细列表?我的意思是,我想在数据库中找到用户,然后我想有三个列表,例如AsClientAsTraderAsDriver。现在List<Orders>的计数始终为0。

2 个答案:

答案 0 :(得分:1)

使用InversePropertyAttribute

public class ApplicationUser : IdentityUser
{
    //another stuff...

    [InverseProperty("Client")]
    public virtual ICollection<Order> AsClient { get; set; }

    [InverseProperty("Trader")]
    public virtual ICollection<Order> AsTrader { get; set; }

    [InverseProperty("Driver")]
    public virtual ICollection<Order> AsDriver { get; set; }
}

答案 1 :(得分:0)

我建议您在这里使用一些继承。

因此,您将创建三个扩展ApplicationUser的类,每个交易者,客户和驱动程序一个。然后在每个这些类上都有订单列表。另外,在Order类上,将类型从ApplicationUser更改为适当的子类型。

然后,作为一种继承策略,您可以选择每个层次结构表,并按照this link上的说明进行操作。

希望这会有所帮助。