Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate-通过非PK外键映射集合_C#_Asp.net Mvc_Nhibernate - Fatal编程技术网

C# NHibernate-通过非PK外键映射集合

C# NHibernate-通过非PK外键映射集合,c#,asp.net-mvc,nhibernate,C#,Asp.net Mvc,Nhibernate,好的,不要问为什么,但我们需要以下类别结构: 系统定义的根类别的集合(我们对这些类别使用枚举) 用户定义的子类别的集合,每个子类别都具有根类别id外键 系统定义的子类别的集合 所以,它看起来有点像这样: 系统定义根类别->用户定义子类别->系统定义叶类别->项目 我们需要根据子类别的根类别加载预定义类别。例如,如果我们有: 车辆->我的蒙迪欧->[车轮、立体声、仪表板] 用户定义的“My Mondeo”子类别将根据其根类别(车辆)获取其子类别 所以我们有这种反向的多对多关系: rootCats

好的,不要问为什么,但我们需要以下类别结构:

  • 系统定义的根类别的集合(我们对这些类别使用枚举)
  • 用户定义的子类别的集合,每个子类别都具有根类别id外键
  • 系统定义的子类别的集合
  • 所以,它看起来有点像这样:

    系统定义根类别->用户定义子类别->系统定义叶类别->项目

    我们需要根据子类别的根类别加载预定义类别。例如,如果我们有:

    车辆->我的蒙迪欧->[车轮、立体声、仪表板]

    用户定义的“My Mondeo”子类别将根据其根类别(车辆)获取其子类别

    所以我们有这种反向的多对多关系:

    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
    我猜用户定义的类别和子类别之间也有一个关系表(从根类别的可用子类别中选择) 然后再从用户定义的类别到子类别进行集合(多对多)