属性框架上的属性框架上的ForeignKeyAttribute ...类型...无效

时间:2014-07-10 13:36:59

标签: c# entity-framework entity-framework-6

我收到此错误:

  

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

以下是模型类:

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; }
}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要选择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; }

答案 1 :(得分:1)

消息非常明确:您指定SubdivisionHOAId作为SubdivisionHOA类上的foregin键属性名称,该名称不存在。您可能打算输入Id

来自documentation

  

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

从Name属性的描述:

  

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

这是适用于此的第二次使用。 SubdivisionsHOA被视为导航属性,因此编译器会在SubdivisionHOAId类上查找名为SubdivisionHOA的外键。