Well, field access is implemented. See the tests here for an example:
http://code.google.com/p/fluent-nhibernate/source/browse/trunk/src/FluentNHibernate.Testing/DomainModel/Mapping/AccessStrategyPropertyMapTester.cs

You just can't map fields directly. You have to map the properties and
then specify the Access strategy.

On Wed, Mar 18, 2009 at 12:15 PM, Nick Gieschen <nickgiesc...@gmail.com> wrote:
>
> "Use an autoproperty, not a field."
>
> My question then is why hasn't field access been implemented? Is there
> a theoretical reason for not implementing it or is it a bug or just
> something that hasn't been implemented yet?
>
> On Mar 14, 12:03 pm, James Gregory <jagregory....@gmail.com> wrote:
>> The key to what paul said is "private auto properties". Use an autoproperty,
>> not a field.
>> private string PasswordHash { get; set; }
>>
>> instead of
>>
>> private string PasswordHash;
>>
>> On Sat, Mar 14, 2009 at 5:59 PM, Nick Gieschen <nickgiesc...@gmail.com>wrote:
>>
>>
>>
>> > Hey,
>>
>> > Not sure what you mean by this. As far as I can tell, Reveal doesn't
>> > work on fields. I get the same error as Anders. I tried adding
>> > Access.AsField() for the heck of it as well and it still threw a
>> > FluentNHibernate.UnknownPropertyException.
>>
>> > So, is this a bug? It seems to me Reveal should work on fields as I'd
>> > guess that would be the most common scenario when using it.
>>
>> > Nick
>>
>> > On Mar 3, 4:06 am, Paul Batum <paul.ba...@gmail.com> wrote:
>> > > The current Fluent NHibernate trunk does not support strongly typed
>> > mapping
>> > > of fields. I typically use private auto properties rather than private
>> > > fields to work around this. If you would prefer to use the fields then
>> > > Reveal is the way to go.
>>
>> > > On Tue, Mar 3, 2009 at 7:07 PM, Anders <and...@waglund.net> wrote:
>>
>> > > > I just noticed the difference. It has to be a private PROPERTY not a
>> > > > private FIELD.
>>
>> > > > Is this a bug?
>>
>> > > > Thanks
>> > > > Anders
>>
>> > > > On Mar 3, 9:04 am, Anders <and...@waglund.net> wrote:
>> > > > > Sorry, I should have included the exception. My bad.
>>
>> > > > > Line 36 in StaticSessionManager is: map.Map
>> > > > > (User.Expressions.PasswordHash);
>>
>> > > > > Unable to cast object of type 'System.Reflection.RtFieldInfo' to type
>> > > > > 'System.Reflection.PropertyInfo'.
>> > > > >    at FluentNHibernate.Utils.ReflectionHelper.GetProperty[MODEL]
>> > > > > (Expression`1 expression) in d:\Builds\FluentNH\src\FluentNHibernate
>> > > > > \Utils\ReflectionHelper.cs:line 33
>> > > > >    at FluentNHibernate.AutoMap.AutoMap`1.Map(Expression`1 expression)
>> > > > > in d:\Builds\FluentNH\src\FluentNHibernate\AutoMap\AutoMap.cs:line 40
>> > > > >    at Procentas.Web.StaticSessionManager.<.cctor>b__2(AutoMap`1 map)
>> > > > > in ....\StaticSessionManager.cs:line 36
>> > > > >    at
>>
>> > FluentNHibernate.AutoMap.AutoPersistenceModel.ForTypesThatDeriveFrom[T]
>> > > > > (Action`1 populateMap) in d:\Builds\FluentNH\src\FluentNHibernate
>> > > > > \AutoMap\AutoPersistenceModel.cs:line 225
>> > > > >    at Procentas.Web.StaticSessionManager.<.cctor>b__1
>> > > > > (MappingConfiguration m) in ....\StaticSessionManager.cs:line 30
>> > > > >    at FluentNHibernate.Cfg.FluentConfiguration.Mappings(Action`1
>> > > > > mappings) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg
>> > > > > \FluentConfiguration.cs:line 69
>> > > > >    at Procentas.Web.StaticSessionManager..cctor() in ....
>> > > > > \StaticSessionManager.cs:line 49
>>
>> > > > > /Anders
>>
>> > > > > On Mar 3, 2:55 am, Paul Batum <paul.ba...@gmail.com> wrote:
>>
>> > > > > > Anders,
>>
>> > > > > > The first approach works, its my preferred solution as I really
>> > really
>> > > > hate
>> > > > > > magic strings. You never explained what your problem was. Are you
>> > > > getting a
>> > > > > > compilation error? runtime error?
>>
>> > > > > > Paul Batum
>>
>> > > > > > On Tue, Mar 3, 2009 at 12:24 AM, Anders <and...@waglund.net>
>> > wrote:
>>
>> > > > > > > I resolved this issue by converting my fields to private
>> > properties
>> > > > > > > and using the Reveal.Property method.
>>
>> > > > > > > private string PasswordHash { get; set; }
>> > > > > > > private string _PasswordSalt = Guid.NewGuid().ToString();
>> > > > > > > private string PasswordSalt
>> > > > > > > {
>> > > > > > >        get { return _PasswordSalt; }
>> > > > > > >        set { _PasswordSalt = value; }
>> > > > > > > }
>>
>> > > > > > > AutoPersistenceModel.MapEntitiesFromAssemblyOf<IEntity>()
>> > > > > > >        .Where(type => type.GetInterface(typeof(IEntity).Name) ==
>> > > > typeof
>> > > > > > > (IEntity))
>> > > > > > >        .ForTypesThatDeriveFrom<User>(map =>
>> > > > > > >        {
>> > > > > > >                 map.Map(Reveal.Property<User>("PasswordHash"));
>> > > > > > >                map.Map(Reveal.Property<User>("PasswordSalt"));
>> > > > > > >        }))
>>
>> > > > > > > /Anders
>>
>> > > > > > > On Feb 26, 3:01 pm, Anders <and...@waglund.net> wrote:
>> > > > > > > > Hi
>>
>> > > > > > > > I'm trying to use the first option specified athttp://
>> > > > > > > wiki.fluentnhibernate.org/show/StandardMappingPrivateProperties
>> > > > > > > > together with auto mapping and ForTypesThatDeriveFrom.
>>
>> > > > > > > > Is this not supported?
>>
>> > > > > > > > Sample code:
>> > > > > > > > AutoPersistenceModel.MapEntitiesFromAssemblyOf<IEntity>()
>>
>> > > > > > > .Where(type => type.GetInterface(typeof(IEntity).Name) ==
>> > > > > > > > typeof(IEntity))
>>
>> > > > > > > .ForTypesThatDeriveFrom<User>(map =>
>>
>> > {
>>
>> > > > > > > map.Map(User.Expressions.PasswordHash);
>>
>> > > > > > > map.Map(User.Expressions.PasswordSalt);
>>
>> > }))
>>
>> > > > > > > >         public class User : IEntity
>> > > > > > > >         {
>> > > > > > > >                 public virtual int Id { get; set; }
>>
>> > > > > > > >                 public virtual string UserName { get; set; }
>>
>> > > > > > > >                 private string _PasswordHash;
>> > > > > > > >                 private string _PasswordSalt =
>> > > > Guid.NewGuid().ToString();
>>
>> > > > > > > >                 public virtual void SetPassword(string
>> > password)
>> > > > > > > >                 {
>> > > > > > > >                         _PasswordHash = Hasher.Hash(password,
>> > > > > > > _PasswordSalt);
>> > > > > > > >                 }
>>
>> > > > > > > >                 public virtual bool IsPasswordCorrect(string
>> > > > password)
>> > > > > > > >                 {
>> > > > > > > >                         return Hasher.Hash(password,
>> > _PasswordSalt)
>> > > > ==
>> > > > > > > _PasswordHash;
>> > > > > > > >                 }
>>
>> > > > > > > >                 public static class Expressions
>> > > > > > > >                 {
>> > > > > > > >                         public static readonly
>> > > > > > > > System.Linq.Expressions.Expression<Func<User, object>>
>> > PasswordHash
>> > > > =
>> > > > > > > > x => x._PasswordHash;
>> > > > > > > >                         public static readonly
>> > > > > > > > System.Linq.Expressions.Expression<Func<User, object>>
>> > PasswordSalt
>> > > > =
>> > > > > > > > x => x._PasswordSalt;
>> > > > > > > >                 }
>> > > > > > > >         }
>>
>> > > > > > > > How are you supposed to do this using fluent nhibernate?
>>
>> > > > > > > > Thanks
>> > > > > > > > Anders
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to