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].
>> >>>> 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].
>> >>> 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.
>> >
>>
>> --
>>
>> 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.
>>
>>
>
> --
>
> 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.
>

--

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