3

「 Category」オブジェクトには次のモデル クラスがあります。

public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Category ParentCategory { get; set; }

public virtual IList<Category> SubCategories { get; set; }

これは、「 Category」の流暢な nhibernate マッピング クラスです。

Id(x => x.Id).GeneratedBy.Native();

Map(x => x.Name);
References(x => x.ParentCategory).Column("ParentCategoryId");

// ** THE BELOW MAPPING IS WHAT I'M UNSURE ABOUT **
HasMany(x => x.SubCategories).Where(x => x.Id == x.ParentCategory.Id);

これが関連する私のデータベースは、いくつかの「カテゴリ」で構成されており、そのうちのいくつかはルートレベルにあり (ParentCategoryId = NULL を持っています)、他のすべてはサブカテゴリであり、1 レベルの深さしかないか、3 である可能性があります,4,5 レベルの深さ (再帰的な親はルート/親の CategoryId.

行/レコード間の関係の例:

Cars (Id = 1 - ParentCategoryId = NULL)
Cars (Id = 1) > Hatchback (Id = 2 - ParentCategoryId = 1)
Cars (Id = 1) > Hatchback (Id = 2) > Ford (Id = 3 - ParentCategoryId = 2)

Motorcycles (Id = 4 - ParentCategoryId = NULL)
Motorcycles (Id = 4) > Scooters (Id = 5 - ParentCategoryId = 4)

Category クラス内の ' SubCategories ' プロパティは、現在の Category(Id) の' ParentCategoryId 'を持つすべてのカテゴリを取得する必要がありますが、これをどのようにマッピングするのかわかりません。上記の例に示されている HasMany マッピングを試しましたが、失敗しました。

4

1 に答える 1

3

HasManyマッピングを次のように変更することで、これに対する実用的なソリューションを実装したと思います。

HasMany(x => x.SubCategories)
.Cascade.AllDeleteOrphan()
.KeyColumn("ParentCategoryId")
.Where(x => x.ParentCategory.Id == x.Id)
于 2012-05-04T14:59:23.913 に答える