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