如何映射NHibernate中的嵌套泛型

如何映射NHibernate中的嵌套泛型,nhibernate,generics,Nhibernate,Generics,在NHibernate中,您可以像这样映射泛型 <class name="Units.Parameter`1[System.Int32], Units" table="parameter_int" > </class> 但是我如何映射这样的类呢 Set<T> where T is a Parameter<int> like this Set<Parameter<int>> Set,其中T是类似于此集合的参数 看起

在NHibernate中,您可以像这样映射泛型

<class name="Units.Parameter`1[System.Int32], Units" table="parameter_int"  >
</class>

但是我如何映射这样的类呢

Set<T> where T is a Parameter<int> like this Set<Parameter<int>>
Set,其中T是类似于此集合的参数
看起来像这样的映射hbm.xml失败了

<class name="Set`1[[Units.Parameter`1[System.Int32], Units]],Units"  table="settable"/> 

我稍微简化了我的映射,以便非常清楚地理解我的观点。基本上,我希望NHibernate映射具有泛型类型参数的泛型类

我想通过谷歌搜索了解的是,NHibernate无法在TypeNameParser.parse()中将名称解析为正确的类型,这导致在将映射添加到配置时出现以下错误

System.ArgumentException:引发了类型为“System.ArgumentException”的异常。
参数名称:typeName@31


有人找到了绕过此限制的方法吗?

我认为您必须将其映射为自定义类型。请参阅和google以获取IUserType。

我认为您必须将其映射为自定义类型。请参阅和google以获取IUserType。

在我看来,IUserType是为属性而不是类映射创建自定义处理程序。我不能在我的类声明中使用type=,我误解了你的问题。你在做这样的事情:我不知道这是可能的。请注意,作者(Ayende)以“简言之,这是可能的,但不要这样做”结尾。你是对的。不幸的是,我没有为我的设置创建特定类的特权,因为我无法控制t将是什么。我正在开发一个框架,我不想限制集合,因此t是非泛型的。因此,我必须将我的收藏还原为非通用版本。感谢您的帮助。在我看来,IUserType是关于为属性而不是类映射创建自定义处理程序的。我不能在我的类声明中使用type=,我误解了你的问题。你在做这样的事情:我不知道这是可能的。请注意,作者(Ayende)以“简言之,这是可能的,但不要这样做”结尾。你是对的。不幸的是,我没有为我的设置创建特定类的特权,因为我无法控制t将是什么。我正在开发一个框架,我不想限制集合,因此t是非泛型的。因此,我必须将我的收藏还原为非通用版本。谢谢你的帮助。