如何创建双外键实体框架CF

时间:2018-11-04 02:06:48

标签: asp.net-mvc entity-framework ef-migrations

我正在使用ASP.NET MVC和实体框架(代码优先)。

我拥有默认情况下创建的所有实体表,并且我想创建一个Review

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

但是,当我尝试使用add-migration添加该表时,出现此错误:

  

在关系约束中,从属角色和主体角色的属性数量必须相同。

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

1 个答案:

答案 0 :(得分:1)

问题是您对用户表具有一个导航属性:

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; }