Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate设置访问权限=“;字段。camelcase下划线“;在版本3中失败_Nhibernate - Fatal编程技术网

NHibernate设置访问权限=“;字段。camelcase下划线“;在版本3中失败

NHibernate设置访问权限=“;字段。camelcase下划线“;在版本3中失败,nhibernate,Nhibernate,我有一个用NHib 1.2创建的解决方案,我们正在升级到NHib 3.0 我们的hbm文件具有以下属性: <property name="ContentId" column="ContentId" access="field.camelcase-underscore" /> 为什么这会停止工作?NHib 3还支持它吗 我们可能需要添加许多类似的属性。NHibernate极大地改进了NH2.X和NH3.X中的错误消息传递和诊断功能。您告诉NHibernate您有一个属性,并且希望通过

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

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

<property name="ContentId" column="ContentId" access="field.camelcase-underscore" />
为什么这会停止工作?NHib 3还支持它吗


我们可能需要添加许多类似的属性。

NHibernate极大地改进了NH2.X和NH3.X中的错误消息传递和诊断功能。您告诉NHibernate您有一个属性,并且希望通过字段访问将其映射到一个名为_camelcaseconvention的字段。您没有名为ContentId的属性,NHibernate会让您知道您对它撒了谎。:)

尝试将映射更新到:

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


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

我想提供一些信息,帮助我回答这个问题:

在此链接中,Fabio解释了您遇到的相同问题,如下所示:

这个映射

意思是:对于我的名为“PositiveValue”的财产,您(NH)必须访问 田野;要发现哪个字段是关联字段,您(NH)必须 使用“camelcase下划线”策略

如果没有属性,则不能将访问器与特定 战略


这让我觉得有点奇怪,因为这意味着添加虚拟的、未使用的属性,只是为了让nhibernate3编译器满意。底层功能是相同的。

这个类是否包含_contentId?如果有字段,为什么不使用access='field'来代替?它仍然受支持,请发布完整的stacktrace。谢谢。NHibernate改变了这一点,这让升级1.2版本中使用此功能的大型域模型变得很痛苦。来自NHib的行动:…XML。。。在编写NHibernate HQL查询时,使用可读性更强的属性名称。。。在幕后,NHibernate知道在加载和保存对象时绕过属性而使用字段。因为您使用的是字段,所以该属性实际上被忽略,它甚至不必存在于代码中!NHibernate in Action是一本非常好的书,但自NH1.2(本书使用)以来,已经发生了很大的变化。我完全理解NH团队为什么增加这些更严格的检查。大多数情况下,类定义和映射之间的不匹配是一个错误。这个答案听起来像是nhibernate没有变为与旧映射向后不兼容。如果您在映射中有默认的access=“field.camelcase underline”,并指定了一个属性“Bla”,那么在域类中只有一个名为“Bla”的属性才能工作。升级到nhibernate3后,它将停止工作。这里建议的解决方案很好——我将向大约60个类添加所述的属性。事实上,我认为可以公平地说,默认访问=“field camelcase underline”在nhibernate3中实际上不再受支持
<property name="_contentId" column="ContentId" access="field" />