我收到错误,然后尝试将AgendaType添加到数据库上下文:
未处理的类型' System.InvalidOperationException'发生在EntityFramework.dll中 附加信息:属性' AgendaType'上的ForeignKeyAttribute在类型' MyDb.Agendum'无效。外键名称' FK_Agenda_AgendaType'未在依赖类型“MyDb.Agendum”上找到。 Name值应该是以逗号分隔的外键属性名称列表。
[Table("AgendaType")]
public partial class AgendaType
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public AgendaType()
{
Agenda = new HashSet<Agendum>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[StringLength(2)]
[Index("IX_AgendaType_Code", 1, IsUnique = true)]
public string Code { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Agendum> Agenda { get; set; }
}
public partial class Agendum
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int AgendaTypeId { get; set; }
[ForeignKey("FK_Agenda_AgendaType")]
public virtual AgendaType AgendaType { get; set; }
}
但是我在属性AgendaType上指定了外键,就像提供的数据库方案一样。什么是不正确的?
答案 0 :(得分:1)
[ForeignKey]
确实可以应用于导航属性或键属性,但不能同时应用于两者(提供的链接中的示例说明了用法)。如果外键的名称不同于约定,则只应使用该属性。请注意,这样做:
[ForeignKey("FK_Agenda_AgendaType")]
public virtual AgendaType AgendaType { get; set; }
然后int
外键属性应为:
public int FK_Agenda_AgendaType { get;set; }
帖子的旧部分,留在这里记录讨论的历史:
您必须将[ForeignKey("FK_Agenda_AgendaType")]
放在AgendaTypeId属性上,如下所示:
[ForeignKey("FK_Agenda_AgendaType")]
public int AgendaTypeId { get; set; }
编辑:似乎ForeignKey名称应该不同:
[ForeignKey("FK_AgendaType")]
public int AgendaTypeId { get; set; }