Как получить доступ к полю поддержки базового класса, используя свободный nhibernate? - PullRequest
2 голосов
/ 24 мая 2010

Как настроить стратегию доступа в классе сопоставления так, чтобы она указывала на базовое поле _photos?

public class Content
{
  private IList<Photo> _photos;
  public Content()
  {
     _photos = new List<Photo>();
  }
  public virtual IEnumerable<Photo> Photos
  {
    get
    {
      return _photos;
    }
  }

  public virtual void AddPhoto() {...}
}

public class Article : Content
{
  public string Body {get; set;}

}

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

public class ArticleMap : ClassMap<Article>
{
   HasManyToMany(x => x.Photos)    
   .Access.CamelCaseField(Prefix.Underscore)  //_photos
   //...
}

Я попытался переместить поле поддержки _photos непосредственно в класс, и доступ работает.Итак, как я могу получить доступ к полю поддержки базового класса?

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

хорошо, нашел ответ. Используя Fluent NHibernate версии 1.1 (выпущена 23 мая 2010 г.), вы можете использовать метод открыть элемент:

Reveal.Member<YourEntity>("_privateField");

Таким образом, вышеприведенный класс отображения теперь становится:

public class ArticleMap : ClassMap<Article>
{
   HasManyToMany<Photo>(Reveal.Member<Article>("_photos"))
   //...
}

Сведения о выпуске: http://fluentnhibernate.org/blog/2010/05/23/feature-focus-fields.html

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

Попробуйте изменить доступность _photos на защищенный:

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