C# nhibernate“;XYZ的getter发生异常;
我是一个想进入nHibernate的新手,我过得很开心。我得到以下异常(和内部异常) Common32.ExtractionCompany.ID的getter出现异常 对象与目标类型不匹配 基本上,因为我刚刚开始,我有很多类,它们应该有另一个类的实例存储在列表中。A存储B,B存储C等。我使用guid作为键,因此在oracle11g(我的数据库)中,我使用Raw(16)作为数据类型。奇怪的是,这部分起作用。如果我把一些B对象放在a中,一切都很好。一旦我试着把C对象放到B中,一切都会中断 下面是我创建目标表的SQL语句。每个表都有一个ID列作为主键,还有一个列作为返回上一个表的外键C# nhibernate“;XYZ的getter发生异常;,c#,oracle,nhibernate,C#,Oracle,Nhibernate,我是一个想进入nHibernate的新手,我过得很开心。我得到以下异常(和内部异常) Common32.ExtractionCompany.ID的getter出现异常 对象与目标类型不匹配 基本上,因为我刚刚开始,我有很多类,它们应该有另一个类的实例存储在列表中。A存储B,B存储C等。我使用guid作为键,因此在oracle11g(我的数据库)中,我使用Raw(16)作为数据类型。奇怪的是,这部分起作用。如果我把一些B对象放在a中,一切都很好。一旦我试着把C对象放到B中,一切都会中断 下面是我创
create table ExtractionCommand
( ID Raw(16) );
create table ExtractionCompany
( ID Raw(16),
CommandID Raw(16) );
create table ExtractionTable
( ID Raw(16),
CompanyID Raw(16) );
create table ExtractionColumn
( ID Raw(16),
TableID Raw(16) );
create table ExtractionTarget
( ID Raw(16),
ColumnID Raw(16));
这是我的课程
还有我的地图
<class name="ExtractionCommand" table="ExtractionCommand" >
<id name="ID">
<generator class="guid" />
</id>
<bag name="Company" cascade="all">
<key column="CommandID" />
<one-to-many class="ExtractionCompany"/>
</bag>
</class>
<class name="ExtractionCompany" table="ExtractionCompany" >
<id name="ID">
<generator class="guid" />
</id>
<property name="CommandID"/>
<bag name="Tables" cascade="all">
<key column="CompanyID" />
<one-to-many class="ExtractionCompany"/>
</bag>
</class>
<class name="ExtractionTable" table="ExtractionTable" >
<id name="ID">
<generator class="guid" />
</id>
<property name="CompanyID"/>
<bag name="Columns" cascade="all">
<key column="TableID"/>
<one-to-many class="ExtractionColumn"/>
</bag>
</class>
<class name="ExtractionColumn" table="ExtractionColumn" >
<id name="ID">
<generator class="guid" />
</id>
<property name="TableID" />
<one-to-one name="Target" class="ExtractionTarget"/>
</class>
<class name="ExtractionTarget" table="ExtractionTarget" >
<id name="ID">
<generator class="guid" />
</id>
<property name="TargetTable"/>
<property name="TargetColumn"/>
</class>
非常感谢您的帮助。非常感谢。
mj它会中断,因为您在
提取公司
映射的一对多
部分中使用了错误的类型。您需要改用ExtractionTable
:
<class name="ExtractionCompany" table="ExtractionCompany" >
<id name="ID">
<generator class="guid" />
</id>
<property name="CommandID"/>
<bag name="Tables" cascade="all">
<key column="CompanyID" />
<one-to-many class="ExtractionTable"/>
</bag>
</class>
此外:
您的类不应包含父类的ID。如果他们确实需要对父对象的引用,请添加一个具有父对象类型的属性,并将其映射为引用。它会中断,因为您在
提取公司映射的一对多部分中使用了错误的类型。您需要改用ExtractionTable
:
<class name="ExtractionCompany" table="ExtractionCompany" >
<id name="ID">
<generator class="guid" />
</id>
<property name="CommandID"/>
<bag name="Tables" cascade="all">
<key column="CompanyID" />
<one-to-many class="ExtractionTable"/>
</bag>
</class>
此外:
您的类不应包含父类的ID。如果他们确实需要对父对象的引用,请添加一个具有父对象类型的属性,并将其映射为引用。好的方面。我还要提到的是,一般来说,您不应该序列化您的nhibernate实体。如果您使用的是延迟加载,那么这将不起作用。一般来说,我认为这里被接受的解决方案是使用DTO。好的方面。我还要提到的是,一般来说,您不应该序列化您的nhibernate实体。如果您使用的是延迟加载,那么这将不起作用。一般来说,我认为公认的解决方案是使用DTO。
<class name="ExtractionCompany" table="ExtractionCompany" >
<id name="ID">
<generator class="guid" />
</id>
<property name="CommandID"/>
<bag name="Tables" cascade="all">
<key column="CompanyID" />
<one-to-many class="ExtractionTable"/>
</bag>
</class>