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

Как настроить стратегию доступа в классе сопоставления так, чтобы она указывала на базовое поле _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 ответа

Решение

Хорошо нашел ответ. Используя 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

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

protected IList<Photo> _photos;
Другие вопросы по тегам