我正在努力使用NHibernate映射子类。我正在保存我们生成的报告,目前有两种不同的标准类型,我正在序列化并希望将其存储在每个报告的一列(标准)中:基本和时间。每个报告都会有一个非空的条件的XML列。这里是我的课:NHibernate异常发生Id的getter;对象与目标类型不匹配
我报告类是主要的类映射:
namespace Core {
public class Report {
public virtual int ReportId { get; set; }
public virtual string Name { get; set; }
public virtual ReportCriteria Criteria { get; set; }
}
}
我ReportCriteria类是抽象的继承了两个标准类型:
namespace Core{
[XmlRoot("Criteria"), Serializable]
public abstract class ReportCriteria {
public abstract string GenSql();
}
}
我的BasicCriteria类继承自ReportCriteria并使用GenSql()方法:
个namespace Core {
[XmlRoot("Criteria"), Serializable]
public class BasicCriteria : ReportCriteria {
public override string GenSql(){
//method implementation
}
}
}
我TimeCriteria类从ReportCriteria继承和使用GenSql()方法:
namespace Core {
[XmlRoot("Criteria"), Serializable]
public class TimeCriteria : ReportCriteria {
[Past]
public virtual DateTime StartDate { get; set; }
public virtual DateTime EndDate { get; set; }
public override string GenSql(){
//method implementation
}
}
}
最后,我的映射文件(Report.hbm.xml)如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping namespace="Core" assembly="Core" xmlns="urn:nhibernate-mapping-2.2">
<class name="Report" table="Report">
<id name="ReportId">
<generator class="identity" />
</id>
<discriminator column="CriteriaType" />
<property name="Name" />
<subclass name="Core.BasicCriteria" discriminator-value="Basic">
<property name="Criteria" type="Data.NHibernate.XmlSerializableType`1[[Core.BasicCriteria, Core]], Data" />
</subclass>
<subclass name="Core.TimeCriteria" discriminator-value="Time">
<property name="Criteria" type="Data.NHibernate.XmlSerializableType`1[[Core.TimeCriteria, Core]], Data" />
</subclass>
</class>
</hibernate-mapping>
Data.NHibernate.XmlSerializableType是一个接受泛型类型并序列化它们以用于数据持久性。
请帮我找出什么是错我的映射这是导致出现以下错误: 例如:发生吸气Core.Report.ReportId的异常 内蒙古:对象不匹配目标类型。
在此先感谢!
谢谢,但我实际上已经在我目前的代码中,并仍然得到相同的错误。道歉:我从上述代码中剥离了这些细节以便于阅读。这个问题肯定是指向我的子类。一切工作,直到我试图映射这些。 – BueKoW 2010-12-07 18:19:59