ROTFL.


Tuna Toksöz
http://tunatoksoz.com
http://twitter.com/tehlike

Typos included to enhance the readers attention!



On Thu, Feb 5, 2009 at 9:38 PM, jasonsirota <[email protected]> wrote:

>
> yeah but then I have to do all sorts of "unit" testing, and "robust
> fault-tolerant code", who has the time? ;-)
>
> Jason
>
> On Feb 5, 8:19 am, Markus Zywitza <[email protected]> wrote:
> > We accept patches, did you know ? ;-)
> >
> > -Markus
> >
> > 2009/2/5 jasonsirota <[email protected]>:
> >
> >
> >
> > > Yes, it worked thank you for all your help, I ended up creating my own
> > > static methods in inherited base classes so I can share the
> > > functionality throughout the project, perhaps this isn't any cleaner,
> > > but it makes me FEEL better :D
> >
> > >        public static T[] FindAll(bool cacheable)
> > >        {
> > >            if (!cacheable)
> > >                return FindAll();
> > >            else
> > >                return FindAll(DetachedCriteria.For<T>()
> > >                    .SetCacheable(cacheable));
> > >        }
> >
> > >        public static T[] FindAll(Order order, bool cacheable)
> > >        {
> > >            return FindAll(DetachedCriteria.For<T>()
> > >                .SetCacheable(cacheable)
> > >                .AddOrder(order));
> > >        }
> >
> > >        public static T[] FindAll(Order[] orders, bool cacheable)
> > >        {
> > >            return FindAll(DetachedCriteria.For<T>()
> > >                .SetCacheable(cacheable),orders);
> > >        }
> >
> > > On Feb 4, 8:20 pm, Daniel Pupek <[email protected]> wrote:
> > >> You'll use the detached criterion a lot. Don't worry if the criterion
> syntax
> > >> seems a bit odd. You'll pick it up fast. For SQL junkies HQL tends to
> go
> > >> down a bit easier...I hear that hql exhibits a little better
> performance but
> > >> we haven't noticed a difference.
> > >> A couple notes though, you can't resuse a DetachedCriteria once it has
> been
> > >> passed to activerecord. You can call .Clone though to get a replica of
> it.
> > >> Don't try to over optimize things on your own by using the session or
> static
> > >> properties. You just end up stepping on top of what Nhibernate is
> doing for
> > >> you. Nhibernate and active record have some interest ways to control
> the
> > >> caching...you just have to play with it a bit and in the long run
> you'll be
> > >> a lot happier.
> >
> > >> Don't worry about opening and closing sessions....ActiveRecord does a
> fair
> > >> bit of the session handling for you. You'll just end up creating a
> bunch of
> > >> Stack Overflows. If you have a non-trivial situation and believe you
> need to
> > >> circumvent the automatic session scopes then place your code inside of
> a
> > >> using statement:
> >
> > >> using(new SessionScope())
> > >> {
> >
> > >> Do some active record stuff here!
> >
> > >> }
> >
> > >> ActiveRecord will generally try to use the last sessionscope
> opened...the
> > >> using statement ensures it is disposed properly.
> >
> > >> Dan
> >
> > >> Checkout my blog @http://blog.agilejedi.com
> > >> Checkout my homepage @http://www.agilejedi.com
> >
> > >> On Wed, Feb 4, 2009 at 10:07 PM, jasonsirota <[email protected]>
> wrote:
> >
> > >> > Interesting, that does seem easier. I thought there might be
> something
> > >> > with DC but I couldn't figure out how to create one.
> >
> > >> > The reason I'm pulling all and caching is every page has a
> > >> > "Categories" dropdown list that's needed before any dynamic items
> are
> > >> > pulled from the database. So I could just pull the Name/ID pairs for
> > >> > the dropdown list, populate it into a hash and cache it, but I know
> I
> > >> > will need the category objects anyway and the overhead of
> pre-caching
> > >> > the full list on application load is pretty low.
> >
> > >> > Jason
> >
> > >> > On Feb 4, 8:03 pm, Daniel Pupek <[email protected]> wrote:
> > >> > > Try this:
> > >> > > DetachedCriteria crit =
> > >> > > DetachedCriteria.For<Category>()
> > >> > >                 .SetCacheable(true)
> > >> > >                 .AddOrder(new Order("SortOrder", true));
> > >> > > Category[] categories = ActiveRecordMediator<Category>.FindAll();
> >
> > >> > > On a side not why are you trying to pull all categories? Just pull
> them
> > >> > as
> > >> > > they are needed (using find by primary key)...they will be cached
> as they
> > >> > > are pulled and subsequent calls will get the cached version.
> >
> > >> > > Dan
> >
> > >> > > Checkout my blog @http://blog.agilejedi.com
> > >> > > Checkout my homepage @http://www.agilejedi.com
> >
> > >> > > On Wed, Feb 4, 2009 at 9:38 PM, jasonsirota <[email protected]>
> wrote:
> >
> > >> > > > Okay I got this to work with this set of code:
> >
> > >> > > >            ISessionFactoryHolder holder =
> > >> > > > ActiveRecordMediator.GetSessionFactoryHolder();
> > >> > > >            ISession session =
> holder.CreateSession(typeof(Category));
> > >> > > >            ICriteria crit =
> session.CreateCriteria(typeof(Category));
> > >> > > >            crit.SetCacheable(true);
> > >> > > >            crit.AddOrder(new Order("SortOrder",true));
> > >> > > >            IList list = crit.List();
> > >> > > >            Category[] defaultCategories = new
> Category[list.Count];
> > >> > > >            list.CopyTo(defaultCategories, 0);
> >
> > >> > > > I feel like this is too many lines of code, is there some built
> in AR
> > >> > > > functions. I feel like there should be something in AR
> > >> > > > like:
> >
> > >> > > > Criteria crit = Category.CreateCriteria(); (a method of
> > >> > > > ActiveRecordBase<Category>)
> > >> > > > crit.SetCacheable(true);
> > >> > > > crit.AddOrder(new Order("SortOrder",true));
> > >> > > > Category.FindAll(crit);
> >
> > >> > > > or even better, overloads for find all
> >
> > >> > > > FindAll(bool cacheable)
> >
> > >> > > > Maybe I'm missing something....
> >
> > >> > > > On Feb 4, 5:11 pm, jasonsirota <[email protected]> wrote:
> > >> > > > > So Ayende,
> >
> > >> > > > > Why isn't FindAll() cacheable? It seems like any time you'd
> want to
> > >> > do
> > >> > > > > a FindAll(), you'd want them to be cacheable...shouldn't all
> the
> > >> > > > > activerecord generated queries be associated to a cache
> region, or
> > >> > are
> > >> > > > > they already?
> >
> > >> > > > > Jason
> >
> > >> > > > > On Feb 3, 6:20 pm, Ayende Rahien <[email protected]> wrote:
> >
> > >> > > > > > you need to enable query caching as well, and you need to
> mark the
> > >> > > > query as
> > >> > > > > > cachable.
> > >> > > > > > I don't think you can do it using FindAll
> >
> > >> > > > > > On Wed, Feb 4, 2009 at 2:41 AM, jasonsirota <
> [email protected]>
> > >> > > > wrote:
> >
> > >> > > > > > > For reference, here's my config:
> >
> > >> > > > > > >    <activerecord isWeb="true" isDebug="false"
> >
> > >> >
> threadinfotype="Castle.ActiveRecord.Framework.Scopes.HybridWebThreadScopeInfo,
> > >> > > > > > > Castle.ActiveRecord">
> > >> > > > > > >        <config>
> > >> > > > > > >            <add key="connection.driver_class"
> > >> > > > > > > value="NHibernate.Driver.SqlClientDriver" />
> > >> > > > > > >            <add key="dialect"
> > >> > > > > > > value="NHibernate.Dialect.MsSql2005Dialect" />
> > >> > > > > > >            <add key="connection.provider"
> > >> > > > > > > value="NHibernate.Connection.DriverConnectionProvider" />
> > >> > > > > > >            <add key="connection.connection_string"
> value="XXX"/>
> > >> > > > > > >            <add key="proxyfactory.factory_class"
> > >> > > > > > > value="NHibernate.ByteCode.Castle.ProxyFactoryFactory,
> > >> > > > > > > NHibernate.ByteCode.Castle" />
> > >> > > > > > >            <add key="cache.provider_class"
> >
> > >> >
> value="NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache"
> > >> > > > > > > /
> >
> > >> > > > > > >            <add key="relativeExpiration" value="300" />
> > >> > > > > > >        </config>
> > >> > > > > > >    </activerecord>
> >
> > >> > > > > > > On Feb 3, 4:37 pm, jasonsirota <[email protected]>
> wrote:
> > >> > > > > > > > I thought that you just had to wrap it in SessionScope,
> and
> > >> > > > > > > > SessionScope is enabled for the full httprequest using
> the
> > >> > > > httpmodule
> >
> > >> > > > > > > > However, just to be safe, I wrapped it in a transaction:
> >
> > >> > > > > > > >             Category[] defaultCategories;
> > >> > > > > > > >             using (new
> TransactionScope(OnDispose.Commit))
> > >> > > > > > > >             {
> > >> > > > > > > >                 defaultCategories = Category.FindAll();
> > >> > > > > > > >             }
> >
> > >> > > > > > > > However, I still get the multiple db calls.
> >
> > >> > > > > > > > On Feb 3, 4:23 pm, Stefan Sedich <
> [email protected]>
> > >> > wrote:
> >
> > >> > > > > > > > > Do you not need to wrap your call to get all in a
> > >> > transaction? I
> > >> > > > > > > > > thought second level cache was only commited on commit
> of a
> > >> > > > > > > > > transaction?
> >
> > >> > > > > > > > > Cheers
> > >> > > > > > > > > Stefan
> >
> > >> > > > > > > > > On Wed, Feb 4, 2009 at 10:15 AM, jasonsirota <
> > >> > > > [email protected]>
> > >> > > > > > > wrote:
> >
> > >> > > > > > > > > > After wrestling with the trunk version of
> ActiveRecord and
> > >> > > > NHibernate
> > >> > > > > > > > > > and NH-Contrib version numbers I finally got cache
> support
> > >> > > > enabled
> > >> > > > > > > for
> > >> > > > > > > > > > the AR project, however I'm having trouble getting
> it to
> > >> > work.
> >
> > >> > > > > > > > > > The call is something like:
> >
> > >> > > > > > > > > > Category.FindAll(new Order("SortOrder"),true)
> >
> > >> > > > > > > > > > which returns a list of category sorted by the db
> field
> > >> > > > "SortOrder".
> >
> > >> > > > > > > > > > I've enabled caching on the Category object like:
> >
> > >> > > > > > > > > > [ActiveRecord("Categories",
> Cache=CacheEnum.ReadOnly)]
> > >> > > > > > > > > > public class Category
> > >> > > > > > > > > > ...
> >
> > >> > > > > > > > > > However, each time the page loads, it requeries the
> > >> > database
> > >> > > > instead
> > >> > > > > > > > > > of pulling the resulting list from the cache.
> >
> > >> > > > > > > > > > SELECT this_.CategoryID as CategoryID4_0_,
> > >> > this_.Description as
> > >> > > > > > > > > > Descript2_4_0_, this_.SortOrder as SortOrder4_0_,
> > >> > this_.Type as
> > >> > > > > > > > > > Type4_0_ FROM BudgeterCategories this_ ORDER BY
> > >> > this_.SortOrder
> > >> > > > asc
> >
> > >> > > > > > > > > > Any ideas?
> > >> > > > > > > > > > Jason
> >
> > >> > > > > > > > > --
> > >> > > > > > > > > Stefan Sedich
> > >> > > > > > > > > Software Developerhttp://weblogs.asp.net/stefansedich
> >
>

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