NHibernate параметр access = "field.camelcase-underscore" завершается ошибкой в ​​версии 3 - PullRequest
5 голосов
/ 05 мая 2011

У меня есть решение, созданное с помощью 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 ]

10 голосов
/ 06 мая 2011

NHibernate значительно улучшил свои сообщения об ошибках и диагностику в NH2.X и снова в NH3.X.Вы говорите NHibernate, что у вас есть свойство, и вы хотите отобразить его через полевой доступ к полю, названному соглашением _camelCase.У вас нет свойства с именем ContentId, и NHibernate дает вам знать, что вы лгали ему.:)

Попробуйте обновить отображение:

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

Вам необходимо обновить любые запросы HQL или Criteria, чтобы использовать _contentId вместо ContentId.Другой вариант - добавить частное свойство ContentId.

1 голос
/ 14 июля 2011

Я хотел бы предоставить информацию, которая помогла мне ответить на этот вопрос:

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

В этой ссылке Фабио объясняет ту же проблему, с которой вы столкнулись, так:

Это отображение

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

означает: для моей собственности с именем "PositiveValue" вы (NH) должны иметь доступ к поле; чтобы выяснить, какое поле связано с вами (NH) используйте стратегию "верблюд-подчеркивание".

Если нет свойства, вы не можете использовать средство доступа с определенным стратегия.

Что показалось мне немного странным, потому что это означало добавление фиктивных неиспользуемых свойств, просто чтобы сделать компилятор nhibernate3 счастливым Базовая функциональность одинакова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...