无效的列名称 *Id

GPG*_*GVM 3 c# entity-framework

我知道问题所在:我缺少一个映射来帮助 EF 了解两个表之间的关系,但我没有看到我的错误在哪里。

我有一个使用 EF CF 7 的 Web Api。我可以很好地查询并获取父表数据,但是当我尝试包含相关子数据时,我收到无效列错误。

我的两个表如下所示:

public class Categories
{
    private ICollection<SubCategories> _subcat;
    public int Id { get; set; }
    public string Category { get; set; }
    public virtual ICollection<SubCategories> SubCategories
    {
        get { return _subcat ?? (_subcat = new List<SubCategories>()); }
        set { _subcat = value; }
    }
}

public class SubCategories
{
    public int Id { get; set; }
    public string SubCategory { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

上面的类与我的数据库模式匹配,除了SubCategories 表有一列 CategoryId 并且它是父表 Id 列的 FK。

我的存储库查询如下所示:

return _context.Categories.Include(i => i.SubCategories).ToList();
Run Code Online (Sandbox Code Playgroud)

现在这个错误让我困惑......我隐约记得它与 EF 连接名称有关。在那次经历中,有一个基类定义了 Id,因此当我在类中定义它时,它发生冲突,但这里不是这种情况吗?

列名“CategoriesId”无效。

所以我用谷歌搜索并阅读了几篇文章,但要么我不完全理解,要么它们不是我的问题 - 可能是前者。

Aar*_*nLS 5

上面的类与我的数据库模式匹配,除了 SubCategories 表有一列 CategoryId 并且它是父表 Id 列的 FK。

如果您的表名为“类别”,但您的 FK 名为“CategoryId”,那么您就会遇到问题。复数不一致。

要么将 FK 重命名为 CategoryId,要么最好遵循更常见的单数类名约定(只有集合的实例是复数),并将表和类名更改为 Category。