Я борюсь с отображением подклассов с помощью NHibernate.Я сохраняю отчеты, которые мы генерируем, и в настоящее время существует два разных типа критериев , которые я сериализую и хочу хранить в одном столбце (критерии) для отчета: Basic и Время .Каждый отчет будет иметь столбец XML для критериев, который не является нулевым.Вот мои классы:
Мой Отчет класс - это основной отображаемый класс:
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();
}
}
My BasicCriteria класс наследует от ReportCriteria и использует метод GenSql ():
namespace Core {
[XmlRoot("Criteria"), Serializable]
public class BasicCriteria : ReportCriteria {
public override string GenSql(){
//method implementation
}
}
}
My 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 Внутренний: Объект не соответствует типу цели.
Заранее спасибо!