C# 具有身份的双外键困境

C# 具有身份的双外键困境,c#,asp.net-mvc,entity-framework,ef-code-first,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Ef Code First,Asp.net Identity,我有一个ASP.NETMVC项目,正在为我的用户使用Identity框架 该项目涉及客户和代理,它们只是普通身份用户的不同角色 名为订单的表既属于客户,也属于代理 public class Order { [ForeignKey("User")] public int CustomerID { get; set; } public virtual List<ApplicationUser> Customer { get; set; } [Foreig

我有一个ASP.NETMVC项目,正在为我的用户使用Identity框架

该项目涉及
客户
代理
,它们只是普通身份用户的不同角色

名为
订单
的表既属于
客户
,也属于
代理

public class Order
{
    [ForeignKey("User")]
    public int CustomerID { get; set; }
    public virtual List<ApplicationUser> Customer { get; set; }

    [ForeignKey("User")]
    public int AgentID { get; set; }
    public virtual List<ApplicationUser> Agent { get; set; }
}
公共类秩序
{
[外键(“用户”)]
public int CustomerID{get;set;}
公共虚拟列表客户{get;set;}
[外键(“用户”)]
公共int代理{get;set;}
公共虚拟列表代理{get;set;}
}
但是当使用
addmigration
时,此模型定义将不起作用,并生成不正确的SQL


首先用代码实现这一点的最佳方法是什么?我应该显式定义外键,还是创建联接表以避免对
IdentityUser
表的2个外键引用更好?

我用这个类定义修复了这个问题,以便:

public class Order
{
    public int OrderID { get; set; }

    public virtual ApplicationUser Customer { get; set; }
    public virtual ApplicationUser Agent { get; set; }

}

实体用这个正确地计算出了其余部分

一个订单只能属于一个客户和一个代理,因此不需要为客户和代理使用收款。反而

 public class Order
{
    [ForeignKey("Customer")]
    public int CustomerID { get; set; }
    public virtual ApplicationUser Customer { get; set; }

    [ForeignKey("Agent")]
    public int AgentID { get; set; }
    public virtual ApplicationUser Agent { get; set; }
}

您的标识数据库与订单表所在的位置不同吗?我相信这是与应用程序用户的一对多关系,所以外键将应用于用户。在您的课堂上发布应用程序用户模型!所有内容都在同一个数据库中。我没有覆盖ApplucationUser模型中的任何内容-它是Identity中的默认类。这就是实体框架如何知道要与哪个集合连接的最终属性的问题。只需尝试在ApplicationUser中添加导航属性。然后运行迁移。我需要保存订单、客户和代理之间的关联。我是否应该将其保存在IDs中并跳过外键关联?这似乎不是一种“干净”的方法,但它可能会起作用。关系数据库就是这样工作的。如果要在实体之间创建关联,则需要定义外键并向实体添加约束。我不明白你为什么称这种方法为“不干净”!