NHibernate设置access =“field.camelcase-underscore”在版本3中失败

时间:2011-05-05 16:52:01

标签: nhibernate

我有一个用NHib 1.2创建的解决方案,我们正在升级到NHib 3.0。

我们的hbm文件具有以下属性:

<property name="ContentId" column="ContentId" access="field.camelcase-underscore" />

该类没有ContentId属性。这在NHib 1.2中运行良好,但现在我们得到了以下例外:

Could not compile the mapping document: XXXX.Core.Domain.Video.hbm.xml ---> NHibernate.MappingException: Problem trying to set property type by reflection ---> NHibernate.MappingException: class Core.Domain.Video, Core, Version=1.0.0.29283, Culture=neutral, PublicKeyToken=null not found while looking for property: ContentId ---> NHibernate.PropertyNotFoundException: Could not find the property 'ContentId', associated to the field '_contentId', in class 'Core.Domain.Video'.

为什么停止工作?它在NHib 3中是否仍受支持?

我们可能需要添加许多这样的属性。

2 个答案:

答案 0 :(得分:10)

NHibernate极大地改进了NH2.X中的错误消息和诊断以及NH3.X中的错误消息和诊断。你告诉NHibernate你有一个属性,你想通过字段访问映射到_camelCase约定命名的字段。你没有名为ContentId的属性,NHibernate让你知道你撒谎了。 :)

尝试将映射更新为:

<property name="_contentId" column="ContentId" access="field" />

您需要更新任何HQL或Criteria查询以使用_contentId而不是ContentId。另一种选择是添加私有的ContentId属性。

答案 1 :(得分:1)

我想提供帮助我回答这个问题的信息:

http://groups.google.com/group/nhusers/browse_thread/thread/e078734a221c3c0c/ec8b873b385d4426?lnk=gst&q=field+camelcase+underscore#ec8b873b385d4426

在此链接中,Fabio解释了您遇到的同样问题:

  

此映射

     

<property name="PositiveValue" access="field.camelcase-underscore" />

     

意思是:对于名为“PositiveValue”的财产,您(NH)必须访问   场;发现哪个是您(NH)必须的相关领域   使用策略“camelcase-underscore”。

     

如果没有属性,则无法使用具有特定属性的访问者   策略。

这让我感到有些奇怪,因为它意味着添加虚拟的,未使用的属性,只是为了让nhibernate3编译器感到高兴。基础功能是相同的。