gpt4 book ai didi

c# - NHibernate Exception 发生 getter of Id;对象与目标类型不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:33 30 4
gpt4 key购买 nike

我正在努力使用 NHibernate 映射子类。我正在保存我们生成的报告,目前有两种不同的标准类型,我正在序列化并希望将每个报告存储在一个列(标准)中:基本 和 <强>时间 。每个报告都将有一个 XML 列用于不为空的条件。这是我的类(class):

我的Report 类是被映射的主要类:

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 getter 发生异常内部:对象与目标类型不匹配。

提前致谢!

最佳答案

在我的例子中,这是因为通过 NH 的 linq 提供程序检索实体的条件包括在它不是 IQueryable 实例时调用 IEnumerable 的 Contains 扩展方法。通过 ToList() 将集合转换为 List 解决了这个问题,因为 ICollection native 支持 Contains()。

关于c# - NHibernate Exception 发生 getter of Id;对象与目标类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380026/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com