我的用户表:
public class User
{
[Key]
public int UserId { get; set; }
public virtual ICollection<PollVote> PollVotes { get; set; }
}
我的民意调查表:
public class Poll
{
[Key]
public int PollId { get; set; }
public virtual ICollection<PollVote> PollVotes { get; set; }
}
我的民意调查表
public class PollVote
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int VoteId { get; set; }
[Key]
public int PollId { get; set; }
[Key]
public int UserId { get; set; }
public DateTime TimeVoted { get; set; }
public int Answer { get; set; }
public virtual Poll Poll { get; set; }
public virtual User User { get; set; }
}
我的配置:
//User config:
this.HasMany(x => x.PollVotes)
.WithRequired()
.HasForeignKey(x => x.UserId)
.WillCascadeOnDelete(false);
//Poll Config
this.HasMany(x => x.PollVotes)
.WithRequired()
.HasForeignKey(x => x.PollId)
.WillCascadeOnDelete(false);
//PollVote Config
this.HasKey(x => x.UserId)
.HasRequired(x => x.User)
.WithMany()
.HasForeignKey(x => x.UserId);
this.HasKey(x => x.PollId)
.HasRequired(x => x.Poll)
.WithMany()
.HasForeignKey(x => x.PollId);
关系是:一个民意调查可以有很多票,但一个用户只能对每个民意调查投一票。
当我在PM-Console
中尝试Add-Migration
时出现此错误
\ tSystem.Data.Entity.Edm.EdmAssociationEnd :: Multiplicity在关系'PollVote_Poll'中的角色'PollVote_Poll_Source'中无效。由于“从属角色”是指关键属性,因此从属角色的多重性的上限必须为“1”。 \ tSystem.Data.Entity.Edm.EdmAssociationEnd :: Multiplicity在关系'Poll_PollVotes'中的角色'Poll_PollVotes_Target'中无效。由于“从属角色”是指关键属性,因此从属角色的多重性的上限必须为“1”。
有什么建议吗?
答案 0 :(得分:4)
通过将[Column]
属性添加到数据注释...
[Key, Column(Order = 1)]
public int PollId { get; set; }
[Key, Column(Order = 2)]
public int UserId { get; set; }
...或者使用Fluent API的匿名对象:
this.HasKey(x => new { x.UserId, x.PollId });
this.HasRequired(x => x.User)
.WithMany(u => u.PollVotes)
.HasForeignKey(x => x.UserId);
this.HasRequired(x => x.Poll)
.WithMany(p => p.PollVotes)
.HasForeignKey(x => x.PollId);
不要忘记WithMany
中反向导航属性的lambda表达式,如上所示,并删除UserConfig
和PollConfig
中的冗余配置。