次のようなオブジェクト モデルがあるとします。
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
ここで、カテゴリのツリーに次のようなブランチがあるとします。
- 食べ物
- ナット
- カシュー
- 落花生
- ペカン
- パン
- ライ麦
- 小麦
- 白
- ナット
サブカテゴリが 1 つしか割り当てられていない可能性のある製品があると仮定すると、CTE を使用せずにデータベースへの 1 回のヒットでCriteria
のカテゴリを持つすべての製品を返す を構築することは可能ですか?Food
または、豊富なカテゴリが存在しないことを考えると、完全なカテゴリ マップをメモリにロードし、製品where Category_Id in (...)
を検索してリストがメモリ内ツリーから構築されるように基準を構築する方がよいでしょうか?