我正在使用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搜索评论。
答案 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; }