实体或复杂类型'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.

这里有几个问题

  1. 我怎么能解决这个问题?
  2. 那个ChildrenCategoryID是从哪里产生的?

以上所有内容都用于在MVC中创建递归菜单

实体或复杂类型'DatabaseNameModel.Categories'不能在LINQ到实体查询中构造

@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结构中正确指定关系…

或者使用第二种方法"代码优先"

希望对大家有所帮助