Как можно игнорировать свойства компонента, используя AutoPersistenceModel Fluent Nhibernate? - PullRequest
1 голос
/ 20 апреля 2010

Я использую Fluent NHibernate AutoMappings для сопоставления моих сущностей, включая несколько составных объектов. Один из объектов компонента содержит свойство, подобное следующему:

public string Value 
{ 
  set _value = value; 
}

Это вызывает NHibernate.PropertyNotFoundException: "Не удалось найти получатель для свойства 'Value' ..."

Я хочу игнорировать это свойство.

Я попытался создать IAutoMappingOverride для класса компонента, но я не смог использовать AutoMapping <>. IgnoreProperty (x => x.Value) по той же причине. «Свойство или индексатор« MyComponent.Value »нельзя использовать в этом контексте, потому что в нем отсутствует метод доступа get»

Я также посмотрел на IComponentConvention, но никак не вижу возможности изменить сопоставления с этим соглашением.

Буду признателен за любую помощь ...

Спасибо

Ответы [ 5 ]

1 голос
/ 11 ноября 2011

Вы можете использовать:

Reveal.Member<Owner, object> ("Value")`.

Например

mapping.IgnoreProperty(Reveal.Member<Owner, object> ("Value")

Reveal.Member можно использовать везде, где Fluent NHibernate ожидает выражения. Это можно использовать для раскрытия частных / защищенных свойств и полей.

1 голос
/ 01 октября 2010

Вы можете использовать OverrideAll () в вашем файле отображения. Если вы не знаете тип, членом которого он будет являться, то вам нужно использовать эту версию, указав член в виде строки. Вот пример из Свободного Nhibernate Wiki .

.OverrideAll(map =>  
{  
  map.IgnoreProperty("YourProperty");
});
0 голосов
/ 21 апреля 2010

Я пробовал как частный, так и защищенный метод доступа get, но переопределение не скомпилируется, если метод доступа не является общедоступным.

"Свойство или индексатор нельзя использовать в этом контексте, так как в нем отсутствует метод доступа get"

0 голосов
/ 07 мая 2010

Вы можете добавить публичный метод getter NotSupportedException, чтобы сделать компилятор счастливым:

public virtual string Value 
{ 
    get { throw new NotSupportedException(); }
    set { _value = value; }
}
0 голосов
/ 20 апреля 2010

Возможно, вы сможете заставить переопределение работать, если добавите частный метод Get в свою собственность.

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