假设我们有一个像这样的对象模型:
public class Category
{
public virtual Category Parent { get; set; }
public virtual string Name { get; set; }
public virtual ISet<Category> Children { get; protected set; }
}
public class Product
{
public virtual string Name { get; set; }
public virtual Category Category { get; set; }
public virtual decimal Price { get; set; }
}
在数据库方面,关系将通过多对多关系表来完成,因此数据模式将是这样的:
Category
=================
Id int PK
Name varchar(50)
Parent_Id int FK
Product
=================
Id int PK
Name varchar(50)
Price money
ProductToCategory
=================
Product_Id int PK
Category_Id int PK
现在让我们假设类别树中有一个如下所示的分支:
- 食物
- 坚果
- 腰果
- 花生
- 胡桃
- 面包
- 黑麦
- 小麦
- 白色的
- 坚果
假设我们的产品可能只分配了一个子类别,是否有可能构造一个Criteria
将所有类别的产品返回Food
到数据库并且不使用 CTE 的单次命中?
或者,鉴于不会有丰富的类别,将完整的类别映射加载到内存中并构建标准以便搜索产品where Category_Id in (...)
并从内存树中构建列表会更好吗?