Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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判别子类_C#_Nhibernate_Hbm_Discriminator_Joined Subclass - Fatal编程技术网

C# 连接子类的NHibernate判别子类

C# 连接子类的NHibernate判别子类,c#,nhibernate,hbm,discriminator,joined-subclass,C#,Nhibernate,Hbm,Discriminator,Joined Subclass,这是我的继承人: class abstract Entity { /*members*/ } // mapped to entity table class abstract User : Entity { /*members*/ } // mapped to user table class Employee : User { /*no members*/ } // no table, discriminator = "E" class Contractor : User { /*no me

这是我的继承人:

class abstract Entity { /*members*/ } // mapped to entity table class abstract User : Entity { /*members*/ } // mapped to user table class Employee : User { /*no members*/ } // no table, discriminator = "E" class Contractor : User { /*no members*/ } // no table, discriminator = "C" 类抽象实体{/*成员*/}//映射到实体表 类抽象用户:映射到用户表的实体{/*members*/}// 类Employee:User{/*无成员*/}//无表,discriminator=“E” 类承包商:用户{/*无成员*/}//无表,discriminator=“C” 以下是我在两个单独的hbm文件中的映射:

<class name="Entity" table="entity" xmlns="urn:nhibernate-mapping-2.2"> <id name="Id" column="id"> <generator class="guid.comb" /> </id> <property ... /> </class> <joined-subclass name="User" extends="Entity" table="user"> <key column="id" /> <discriminator column="type" /> <property ... /> <subclass name="Employee" discriminator-value="E" /> <subclass name="Contractor" discriminator-value="C" /> </joined-subclass> 以下是我得到的例外情况:

MappingException:XML验证错误:命名空间“urn:nhibernate-mapping-2.2”中的元素“joined subclass”在命名空间“urn:nhibernate-mapping-2.2”中具有无效的子元素“discriminator”


我错过了什么?无法映射联接子类的已判别子类层次结构吗?

联接子类没有判别器,因为它位于单独的表中。这就是它知道子类是什么的原因。如果您想使用鉴别器,您将为所有子类使用一个表,并且您将使用映射

您想做的事情目前是不可能的


检查允许的构造。

连接的子类可以在单独的文件中定义;然而,这与问题无关。我认为您没有注意到“分离表”是基于鉴别器的新继承层次结构的根。也许您可以提供一个映射,它将做一些类似于我所困惑的事情。@Travis,有趣的重新连接子类。但是,您的用户映射仍然必须是一个子类,而不是一个连接的子类,因为它位于另一个表中?基本上,如果每个类最终都从“实体”这样的基类派生,那么我必须为整个层次结构选择一种策略。我理解不能在同一级别上进行混合,但这是否有可能在将来的不同级别上得到支持?@Travis,您希望为Entity创建一个表的原因是什么?是的;我的所有实体共有6个字段[Id、IsActive、DateCreated、Creator、DateModified、Modifier]。但即使我不需要实体,如果我需要扩展Contractor或Employee,用户也会在类似的情况下取代它的位置。不,你不能随意混合策略,超出文档支持的范围。由于这不是一个非常普遍的需求,我怀疑它是否会得到支持,除非你能为此提供一个经过充分测试的补丁,这可能真的很难编码,如果可能的话。忽略你的“永不做这个或那个”注释(我可以称实体为其他很好的基类名称),当您同时拥有子和孙后代类,其中一个被连接,另一个被歧视时,这个问题与这种情况是同构的。我想我根本不会使用每个层次结构的类,而是使用每个子类的表,即使对于表中只有一列的实体也是如此。谢谢你的文档。