Thanks Patrick

I'll have to think about that one, expired is a Job status and therefore an
enum. I may have to go down the interceptor route :)

On Thu, Dec 17, 2009 at 3:00 PM, Patrick Steele <[email protected]>wrote:

> I was thinking using a nullable bool similar to this:
>
> public class Job : ActiveRecordBase<Job>
> {
>    private bool? expired;
>
>    public bool Expired
>    {
>        get
>        {
>            if( expired == null )
>            {
>                // determine expired state and set value here
>            }
>            return expired.Value;
>        }
>        set
>        {
>            expired = value;
>        }
>    }
> }
>
> So the first time the Expired property is accessed, your logic to
> determine if its expired can be executed.
>
> ---
> Patrick Steele
> http://weblogs.asp.net/psteele
>
>
>
> On Wed, Dec 16, 2009 at 10:40 PM, Paul de Wit <[email protected]> wrote:
> > Thanks for the time spent on this I really appreciate it :)
> > I'm fairly new to activerecord, you said
> > "lazily decide it's state the first time it's called instead of doing at
> > entity load time?"
> > I'm not sure how you do this I thought this is actually what I was trying
> to
> > do.....
> > The "Job" object is being referenced at many different places in the web
> > application so I don't want to put checks all throughout the web app to
> test
> > for expiry. I need some centralized method (like OnLoad) to check for
> this
> > expiry. If I can "lazily" decide its state somehow the first time its
> called
> > I would love to know how to do this!
> >
> > On Thu, Dec 17, 2009 at 2:31 PM, Patrick Steele <
> [email protected]>
> > wrote:
> >>
> >> Interesting.  I dug through the ActiveRecord code and the OnLoad
> >> method ties into NHibernate's IInterceptor.OnLoad.  This method is
> >> called *before* the data returned from the database is used to
> >> populate the entity.  In fact, the method comment states:
> >>
> >> /// <summary>
> >> /// Hook to transform the read data
> >> /// from the database before populating
> >> /// the object instance
> >> /// </summary>
> >>
> >> So that is why your entity is empty during OnLoad.  However, what I
> >> found interesting is that NHibernate's IInterceptor.OnLoad is passed
> >> the data read in from the database giving you a chance to change it
> >> before it is used to populate the entity (which sounds like exactly
> >> what you want).  But that information is not relayed down into the
> >> ActiveRecordBase OnLoad method.  Not sure why that is.
> >>
> >> So I guess one possible workaround is to create your own IInterceptor
> >> (or inherit from NHibernate.EmptyInterceptor and override the OnLoad
> >> functionality like ActiveRecord did).  You could have your expired
> >> check there.  The InterceptorFactory.Create delegate can be assigned
> >> to create an instance of your interceptor instead of the default
> >> ActiveRecord one.
> >>
> >> And this is all based on me skimming over the code for about 15-20
> >> minutes, so take it with a grain of salt.  There may be an easier way
> >> to do this.  For example, if you have an "Expired" property, could you
> >> lazily decide it's state the first time it's called instead of doing
> >> it at entity load time?
> >>
> >> ---
> >> Patrick Steele
> >> http://weblogs.asp.net/psteele
> >>
> >>
> >>
> >> On Wed, Dec 16, 2009 at 8:32 PM, Paul de Wit <[email protected]> wrote:
> >> > Anyone have any thoughts on this problem?
> >> >
> >> > On Thu, Dec 17, 2009 at 1:43 AM, Paul de Wit <[email protected]>
> wrote:
> >> >>
> >> >> Hey
> >> >> Thanks for the quick reply it inherits from "ActiveRecordBase<Job>"
> >> >> On Thu, Dec 17, 2009 at 12:59 AM, Wayne Douglas
> >> >> <[email protected]> wrote:
> >> >>>
> >> >>> what does this class inherit from that provides the OnLoad method
> >> >>> you're
> >> >>> overriding?
> >> >>> need some more info.
> >> >>> w://
> >> >>>
> >> >>> On Wed, Dec 16, 2009 at 1:27 PM, paulddw <[email protected]> wrote:
> >> >>>>
> >> >>>> This method is inside a class called "Job". Everytime a job is
> loaded
> >> >>>> I would like to check the status and set to expired if required.
> >> >>>> However the properties on the instance are all null. How do I
> >> >>>> populate
> >> >>>> the instance??
> >> >>>>
> >> >>>> protected override void OnLoad(object id)
> >> >>>> {
> >> >>>>     base.OnLoad(id);
> >> >>>>     //manipulate data here
> >> >>>>
> >> >>>> }
> >> >>>>
> >> >>>> --
> >> >>>>
> >> >>>> You received this message because you are subscribed to the Google
> >> >>>> Groups "Castle Project Users" group.
> >> >>>> To post to this group, send email to
> >> >>>> [email protected].
> >> >>>> To unsubscribe from this group, send email to
> >> >>>> [email protected]<castle-project-users%[email protected]>
> .
> >> >>>> For more options, visit this group at
> >> >>>> http://groups.google.com/group/castle-project-users?hl=en.
> >> >>>>
> >> >>>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> --
> >> >>> Cheers,
> >> >>>
> >> >>> w://
> >> >>>
> >> >>> --
> >> >>>
> >> >>> You received this message because you are subscribed to the Google
> >> >>> Groups
> >> >>> "Castle Project Users" group.
> >> >>> To post to this group, send email to
> >> >>> [email protected].
> >> >>> To unsubscribe from this group, send email to
> >> >>> [email protected]<castle-project-users%[email protected]>
> .
> >> >>> For more options, visit this group at
> >> >>> http://groups.google.com/group/castle-project-users?hl=en.
> >> >>
> >> >
> >> > --
> >> >
> >> > You received this message because you are subscribed to the Google
> >> > Groups
> >> > "Castle Project Users" group.
> >> > To post to this group, send email to
> >> > [email protected].
> >> > To unsubscribe from this group, send email to
> >> > [email protected]<castle-project-users%[email protected]>
> .
> >> > For more options, visit this group at
> >> > http://groups.google.com/group/castle-project-users?hl=en.
> >> >
> >>
> >> --
> >>
> >> You received this message because you are subscribed to the Google
> Groups
> >> "Castle Project Users" group.
> >> To post to this group, send email to
> >> [email protected].
> >> To unsubscribe from this group, send email to
> >> [email protected]<castle-project-users%[email protected]>
> .
> >> For more options, visit this group at
> >> http://groups.google.com/group/castle-project-users?hl=en.
> >>
> >>
> >
> > --
> >
> > You received this message because you are subscribed to the Google Groups
> > "Castle Project Users" group.
> > To post to this group, send email to
> [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<castle-project-users%[email protected]>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/castle-project-users?hl=en.
> >
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Castle Project Users" group.
> To post to this group, send email to [email protected]
> .
> To unsubscribe from this group, send email to
> [email protected]<castle-project-users%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/castle-project-users?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en.


Reply via email to