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 -~----------~----~----~----~------~----~------~--~---