C# NHibernate-通过非PK外键映射集合
好的,不要问为什么,但我们需要以下类别结构:C# NHibernate-通过非PK外键映射集合,c#,asp.net-mvc,nhibernate,C#,Asp.net Mvc,Nhibernate,好的,不要问为什么,但我们需要以下类别结构: 系统定义的根类别的集合(我们对这些类别使用枚举) 用户定义的子类别的集合,每个子类别都具有根类别id外键 系统定义的子类别的集合 所以,它看起来有点像这样: 系统定义根类别->用户定义子类别->系统定义叶类别->项目 我们需要根据子类别的根类别加载预定义类别。例如,如果我们有: 车辆->我的蒙迪欧->[车轮、立体声、仪表板] 用户定义的“My Mondeo”子类别将根据其根类别(车辆)获取其子类别 所以我们有这种反向的多对多关系: rootCats
rootCats --1---------0..*-- user-defined cats
| |
1 0..n
| |
| |
| |
0..* |
| |
pre-defined cats--1------------------
我已尝试在nhibernate中将其映射为以下内容:
<set name="PreDefinedSubCategories" lazy="false" cascade="none" mutable="false">
<key column="vaultCategoryId" property-ref="Category" />
<one-to-many class="PreDefinedVaultCategory" />
</set>
但是,property ref属性已弃用,并且无论如何它都会抛出“集合与任何会话都不关联”错误
有没有人用nhibernate实现过类似的东西。如果是这样的话,是否有一种很好的方法可以做到这一点,或者我应该定义一种方法,在加载后过滤所有的叶猫?我想你不能使用集合映射的where=”“属性,除非它接受参数(我怀疑是这样的) 也许你应该选择:
- 从用户类别到根类别的多对一
- 从根类别到子类别的集合(一对多) 这样您就可以拥有userCategory.rootCategory.subsubCategories