编程语言
首页 > 编程语言> > C#-由外键ef 4.3编写的第一个复合键代码

C#-由外键ef 4.3编写的第一个复合键代码

作者:互联网

我在使用EF 4.3代码中的外键创建复合键时遇到问题.我想通过数据注释解决这个问题.我找不到正确的数据注释,该注释说EventID是Event的外键,并且是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; }
}

错误
在表’EventVotes’上引入FOREIGN KEY约束’EventVote_User’可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
无法创建约束.请参阅先前的错误.

解决方法:

尝试这个.您也可以在导航属性上放置ForeignKey注释,并引用FK的名称.不确定是否可以解决您的问题,但值得尝试

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

标签:ef-code-first,code-first,c
来源: https://codeday.me/bug/20191201/2082074.html