属性上的实体框架ForeignKeyAttribute是无效的

本文关键字:无效 ForeignKeyAttribute 实体 属性 框架 | 更新日期: 2023-09-27 18:12:24

我得到这个错误:

类型上的属性'SubdivisionsHOA'的ForeignKeyAttribute"HealthOfAustralia.DAL.Models。contentarticlehoassubdivision '不是有效的。的外键名称"SubdivisionHOAId"没有找到依赖类型"HealthOfAustralia.DAL.Models.SubdivisionHOA"。这个名字值应该是一个逗号分隔的外键属性名称列表。

下面是模型类:

public partial class ContentArticleHOAsubdivision
{
    public int Id { get; set; }
    public long ContentArticleId { get; set; }
    public short SubdivisionHOAId { get; set; }
    [ForeignKey("ContentArticleId")]
    public virtual ContentArticleHOA ContentArticleHOA { get; set; }
    [ForeignKey("SubdivisionHOAId")]
    public virtual ICollection<SubdivisionHOA> SubdivisionsHOA { get; set; }
}
public partial class SubdivisionHOA
{
    [Key, ForeignKey("TopTierDivisionHOA")]
    public short Id { get; set; }
    public string Name { get; set; }
    public virtual TopTierDivisionHOA TopTierDivisionHOA { get; set; }
}

我做错了什么?

属性上的实体框架ForeignKeyAttribute是无效的

您需要选择one to many关系,并使用以下代码:

public class ContentArticleHOAsubdivision
{
     ...Comment this
     //public short SubdivisionHOAId { get; set; }
     ...
     [InverseProperty(" create property for ContentArticleHOAsubdivision on SubdivisionHOA")]
     public virtual ICollection<SubdivisionHOA> SubdivisionsHOA { get; set; }
}

one to one与这个:

[ForeignKey("SubdivisionHOA")]
public short SubdivisionHOAId { get; set; }
public virtual SubdivisionHOA SubdivisionsHOA { get; set; }

消息非常清楚:您指定SubdivisionHOAId作为SubdivisionHOA类上的外键属性名称,该属性不存在。你可能想输入Id

来自文档:

注释可以放在外键属性上并指定关联的导航属性名称,也可以放在导航属性上并指定关联的外键名称。

从Name属性的描述:

如果您将foreignkey属性添加到导航属性中,您应该指定关联的外键的名称。如果导航属性有多个外键,请使用逗号分隔外键名称列表。

这里用的是第二种用法。SubdivisionsHOA被认为是一个导航属性,所以编译器在SubdivisionHOA类上查找名为SubdivisionHOAId的外键。