外键组件'X'不是类型'Y'上的声明属性.确认它没有被显式排除

本文关键字:属性 确认 排除 声明 组件 类型 | 更新日期: 2023-09-27 17:54:55

这似乎是一个相当普遍的问题,但我已经尝试了所有方法,并没有看到任何问题。

好像这个问题今天才开始。完整的错误信息:

"外键组件'AllocationID'不是类型'PortfolioSection'上声明的属性。验证它没有被显式地排除在模型之外,并且它是一个有效的原语属性。"

模型:

public class PortfolioSection 
{
    .... some stuff
    public int AllocationID { set; get; }
    [ForeignKey("AllocationID")]
    public virtual Allocation Allocation { get; set; }
    .... More stuff
}
public class Allocation 
{
    ... Some stuff

    [ForeignKey("PortfolioSections")]
    public int AllocationID { set; get; }

    public string Name { set; get;}

    public string Color { set; get; }

    public int SortOrder { set; get; }


    public virtual List<PortfolioSection> PortfolioSections { get; set; }

}

我没有做任何奇怪的w/配置,我可以看到,这将导致这个问题。分配的关键是AllocationID,而不仅仅是ID?

到目前为止,我试过:1. 移除从portfolio section到Allocation的导航属性。2. 把ForeignKey属性放在AllocationID (ForeignKey("Allocation"))上,而不是导航属性

外键组件'X'不是类型'Y'上的声明属性.确认它没有被显式排除

您有几个属性放错了地方。如果您更改:

[ForeignKey("PortfolioSections")]
public int AllocationID { set; get; }

:

[Key]
public int AllocationID { set; get; }

那么这应该可以正常工作。问题是您将键(AllocationID是我假设的主键)声明为PortfolioSections表的ForeignKey。