【发布时间】:2011-02-04 19:09:37
【问题描述】:
我在保存对象时遇到了 nHibernate 错误。
涉及的类有:
interface IHardwareSpecification
{
//fields and methods
}
public class CPUSpecification : IHardwareSpecification
{
//fields and methods
}
public class SystemTransaction
{
//Bunch of other fields
private IHardwareSpecification _specs;
public virtual IHardwareSpecification Specification
{
get { return _specs; }
set { _specs = value;}
}
}
映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" ...>
<class name="SystemTransaction" table="SystemTransactions" lazy="false">
<component access="field.camelcase-underscore" name="Specification"
class="HardwareMarketplace.Model.CPUSpecification">
<property access="field.camelcase-underscore" column="Specification_Rate"
name="Rate"/>
...
</component>
</class>
</hibernate-mapping >
在通过 Save 将对象持久化到数据库时,我收到以下错误:
异常:无法将“Castle.Proxies.IHardwareSpecificationProxy”类型的对象转换为“Hardwaremarketplace.Model.SystemTransactions.CPUSpecification”类型。
我正在尝试找出解决此问题的方法,因此我们将不胜感激。 f
【问题讨论】:
-
@Diego CPUSpecification 是一个值对象,因此没有映射。我没有 IHardwareSpecification 的映射。
-
到目前为止我注意到的唯一错误是该字段名为“_specs”,但映射中的名称是“规范”。根据您的访问设置,该字段应命名为“_specification”。否则我无法重现您的问题。更多信息可能会有所帮助。
-
在您尝试保存实体之前,不知何故为“规范”属性分配了“IHardwareSpecificationProxy”类型的对象。这就是问题的根源。我看不出 nHiberante 创建该代理的理由。在保存之前如何初始化实体?
-
@AlexD 使用 AutoMapper 将 WCF Web 服务 SystemTransactionDTO 数据协定映射到 SystemTransaction 模型实体。
标签: c# nhibernate object-persistence