实体或复杂类型'DatabaseNameModel.Categories'不能在LINQ到实体查询中构造
本文关键字:实体 查询 LINQ Categories 复杂 类型 DatabaseNameModel 不能 | 更新日期: 2023-09-27 18:13:41
我的模型类是
public class Category
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public int? ParentCategoryID { get; set; }
public virtual Category Children { get; set; }
}
我的数据库有以下值
CategoryID CategoryName ParentCategoryID ChildrenCategoryID
1 CAT 1 NULL NULL
2 CAT 2 NULL NULL
3 CAT 3 NULL NULL
4 Child 1.1 1 NULL
5 Child 2 2 2 NULL
6 Child 2.1 1 NULL
尝试填充儿童类别
var query = from row in db.Categories select new Categories
{
CategoryID = row.CategoryID,
CategoryName = row.CategoryName,
ParentCategoryID = row.ParentCategoryID,
Children = db.Categories.Where(x => x.ParentCategoryID == row.CategoryID).ToList()
};
我得到错误
The entity or complex type 'DatabaseNameModel.Categories' cannot be constructed
in a LINQ to Entities query.
这里有几个问题
- 我怎么能解决这个问题?
- 那个
ChildrenCategoryID
是从哪里产生的?
以上所有内容都用于在MVC中创建递归菜单
@Chocol8
对于自连接SQL,结构将是CategoryID CategoryName ParentCategoryID
1 CAT 1 NULL
2 CAT 2 NULL
3 CAT 3 NULL
4 Child 1.1 1
5 Child 2 2 2
6 Child 2.1 1
,因为类别可能有多个子
和模型如果模型是(或类似的)
public class Category
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public int? ParentCategoryID { get; set; }
public virtual ICollection<Category> Categories { get; set; }
public virtual ParentCategory { get; set; }
}
所以如果你要ef正确工作,你必须在SQL结构中正确指定关系…
或者使用第二种方法"代码优先"
希望对大家有所帮助