如何创建双外键Entity Framework CF

How to create double foreign key Entity Framework CF

我正在使用 ASP.NET MVC 和 Entity Framework(代码优先)。

我有默认创建的所有实体 table,我想创建一个 Review table

public Guid Id { get; set; }
public ApplicationUser User { get; set; }
[MaxLength(125)]
[ForeignKey("User"),Column(Order = 0)]
public string ReviewerId { get; set; }
public DateTime Date{ get; set; }
[Required]
[MaxLength(125)]
public string Title{ get; set; }
public string Comment{ get; set; }
[ForeignKey("User"), Column(Order = 1)]
[MaxLength(125)]
public string ReviewedId { get; set; }     // who we are reviewing

然而,当我尝试使用添加迁移添加此 table 时,出现此错误:

The number of properties in the dependent and principal roles in a relationship constraint must be identical.

如何解决这个问题?我的想法是,我希望能够通过 ReviewedId 或 ReviewerId 搜索评论。

问题是您有一个导航 属性 到用户 table:

public ApplicationUser User { get; set; }

但是有两个外键属性声称是这个导航的外键属性:

[ForeignKey("User"),Column(Order = 0)]
public string ReviewerId { get; set; }

[ForeignKey("User"), Column(Order = 1)]
public string ReviewedId { get; set; }

这才是真正的错误。 EF 在外键定义和引用的主键中发现了不一致的属性数量,因此没有解决实际问题。

解决方法是为 ApplicationUser 定义两个导航属性,例如:

[ForeignKey("Reviewer")]
public string ReviewerId { get; set; }
public ApplicationUser Reviewer{ get; set; }

[ForeignKey("ReviewedUser")]
public string ReviewedId { get; set; }
public ApplicationUser ReviewedUser{ get; set; }