views:

146

answers:

2

How do i set the Access Strategy in the mapping class to point to the base _photos field?

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;}

}

I am currently using the following to try and locate the backing field but an exception is thrown as it cannot be found.

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

i tried moving the backing field _photos directly into the class and the access works. So how can i access the backing field of the base class?

A: 

Try changing the accessibility of _photos to protected:

protected IList<Photo> _photos;
Jamie Ide
Nope even setting the the field to public does not work. It almost seems like the configuration setting is only "looking" in the derived class. Instead it needs to "look" in the inherited class to find the field.
+1  A: 

ok found the answer. Using Fluent NHibernate version 1.1 (released 23 May 2010) you can make use of the reveal member method:

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

So the above mapping class now becomes:

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

Release details: http://fluentnhibernate.org/blog/2010/05/23/feature-focus-fields.html