【发布时间】:2015-05-23 11:02:34
【问题描述】:
我有一个 ASP.NET MVC 项目,并且正在为我的用户使用身份框架。
项目涉及Customers和Agents,只是普通身份用户的不同角色。
名为Orders 的表既属于Customer,也属于Agent。
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; }
}
但是在使用add-migration 时,此模型定义将不起作用并产生错误的 SQL。
首先使用代码完成此任务的最佳方法是什么?我应该明确定义外键,还是创建连接表以避免 2 个外键引用 IdentityUser 表会更好?
【问题讨论】:
-
您的身份数据库是否与 Order 表所在的位置不同?我相信这是与 Applicationuser 到 Order 的一对多关系,因此外键将在 Applicatoinuser 中。在您的班级中发布 ApplicationUser 模型!
-
一切都在同一个数据库中。我没有覆盖 ApplucationUser 模型中的任何内容 - 它是 Identity 的默认类。
-
这就是实体框架如何知道哪个最终属性与哪个集合连接的问题。只需尝试在 ApplicationUser 中添加导航属性。然后运行迁移。
-
嗯,我需要保存订单、客户和代理之间的关联。我应该将其保存在 ID 中并跳过外键关联吗?这似乎不是一种“干净”的方式,但它可能会奏效。
-
嗯,这就是关系数据库的工作方式。如果要在实体之间创建关联,则需要定义外键并为实体添加约束。我不明白你为什么称这种方法“不干净”!
标签: c# asp.net-mvc entity-framework ef-code-first asp.net-identity