代码第一个由外键组成的复合键ef 4.3

时间:2012-03-14 22:31:51

标签: c# ef-code-first code-first

我首先在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约束。 无法创建约束。查看以前的错误。

1 个答案:

答案 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在必要时关闭级联/更新。

http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx