我首先在EF 4.3代码中创建由外键创建的复合键时遇到问题。我想通过数据注释来解决这个问题。我无法找到正确的数据注释,表明EventID是事件的外键,并且是EventVote表中主键的一部分。我如何完成这个
public class EventVote
{
[Key, Column(Order = 0)]
[ForeignKey("Event")]
public int EventID { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("User")]
public int UserID { get; set; }
[Required]
public DateTime VoteTime { get; set; }
[Required]
public bool Vote { get; set; }
public virtual Event Event { get; set; }
public virtual User User { get; set; }
}
错误 介绍FOREIGN KEY约束' EventVote_User'在桌面' EventVotes'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。查看以前的错误。
答案 0 :(得分:3)
试试这个。您也可以将ForeignKey注释放在导航属性上,并引用FK的名称。不确定它是否能解决您的问题,但值得一试IMO
public class EventVote
{
[Key, Column(Order = 0)]
public int EventID { get; set; }
[Key, Column(Order = 1)]
public int UserID { get; set; }
[Required]
public DateTime VoteTime { get; set; }
[Required]
public bool Vote { get; set; }
[ForeignKey("EventID")]
public virtual Event Event { get; set; }
[ForeignKey("UserID")]
public virtual User User { get; set; }
}
编辑:从您的错误消息中可以看出,您遇到的问题类似于一对一关系映射所发生的问题。请参阅此文章,了解如何使用fluent API指定在每个关系的一侧禁用级联。
请参阅此文章以解决此问题。请注意,他们使用Fluent API代替数据注释,指定您的映射/关系,或者您可以使用数据注释,只需使用Fluent API在必要时关闭级联/更新。