我知道问题:我缺少一个映射来帮助EF理解我的两个表之间的关系,但我没有看到我的错误在哪里。
我有一个使用EF CF 7的Web Api。我可以查询fine并获取父表数据,但当我尝试包括相关的子数据时,我会得到无效的列错误。
我的两张桌子是这样的:
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; }
}
上面的类与我的数据库架构匹配EXCEPTSubCategories表有一个列CategoryId,它是父表Id列的FK。
我的存储库查询如下:
return _context.Categories.Include(i => i.SubCategories).ToList();
现在这个错误让我不知所措……我隐约记得这与EF连接名称有关。在那个经验中,有一个基类定义了Id,因此当我在类中定义它时,它发生了冲突,但这里不是这样吗?
列名"CategoriesId"无效。
所以我在谷歌上搜索并阅读了几篇文章,但要么我没有完全理解,要么它们不是我的问题——可能是前者。
除了SubCategories表之外,上面的类与我的数据库模式匹配具有列CategoryId,并且它是父表Id列的FK。
如果表名为Categories,但FK名为CategoryId,则会出现问题。不一致的复数形式。
将FK重命名为CategoriesId,或者更好地遵循更常见的单数类名约定(只有集合的实例是复数),并将表和类名更改为Category。