我正在努力使用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