Я борюсь с подклассами сопоставления с использованием NHibernate. Я сохраняю отчеты, которые мы генерируем, и в настоящее время существует два разных типа критериев, которые я сериализую и хотел бы хранить в одной колонке (Критерии) за отчет: Основные и Время. Каждый отчет будет иметь столбец XML для критериев, которые не равны нулю. Вот мои классы:NHibernate Exception Возникший геттер Id; Объект не соответствует целевому типу
Мой Отчет класс является основным классом привязывается:
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
}
}
}
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 - это класс, который принимает общие типы и сериализует их для сохранения данных ,
Пожалуйста, помогите мне понять, что случилось с моим отображением, которое вызывает произойти следующее сообщение об ошибке: Ex: произошло исключение добытчик Core.Report.ReportId Внутренне: объекта не соответствует цели тип.
Заранее благодарен!
Спасибо, но на самом деле у меня есть это в моем текущем коде, и я все равно получаю ту же ошибку. Извинения: я снял эту деталь из моего выше кода, чтобы облегчить чтение. Этот вопрос определенно указывает на мои подклассы. Все работает, пока я не попытаюсь их сопоставить. – BueKoW 2010-12-07 18:19:59