Print Page | Close Window

Not able to query locally cached data

Printed From: IdeaBlade
Category: DevForce
Forum Name: DevForce 2009
Forum Discription: For .NET 3.5
URL: http://www.ideablade.com/forum/forum_posts.asp?TID=1378
Printed Date: 22-Sep-2025 at 4:22am


Topic: Not able to query locally cached data
Posted By: AdamC
Subject: Not able to query locally cached data
Date Posted: 16-Jul-2009 at 3:14pm
Hi,

I'm not able to retrieve data I've cached locally.  The second block of code (below) works fine when I am connected to the database.  However, when I am not connected to the database I get a "Sequence contains no elements" error.  The stack trace is at the bottom.

Here is the code used to save the cache state (seems to work fine):

        EntityQuery<LOCAL_STRING> localStringQuery = null;

        localStringQuery =
            (from ls in domainEntityManagerService.DomainEntityManager.LOCAL_STRING
            select ls);

        domainEntityManagerService.DomainEntityManager.CacheStateManager.SaveCacheState("c:\localization.bin");


Here is the code used to query the table/cache.  The RestoreFromCache() method works fine -- it is the line in red throwing the exception.  I may be going about this the wrong way, so hopefully someone can't point me in the right direction.  Is it not possible to use LINQ queries against locally cached data?  Thanks!

        private EntityQuery<LOCAL_STRING> localStringQuery = null;
        public object GetValue(string localKey)
        {
            try
            {
                if (domainEntityManagerService.DomainEntityManager.IsConnected == false &&
                    domainEntityManagerService.DomainEntityManager.IsLoggedIn == false)
                {
                    domainEntityManagerService.DomainEntityManager.DefaultQueryStrategy = QueryStrategy.CacheOnly;
                    domainEntityManagerService.DomainEntityManager.CacheStateManager.RestoreCacheState("c:\localization.bin");
                }

                localStringQuery =
                    (from ls in domainEntityManagerService.DomainEntityManager.LOCAL_STRING
                     where ls.LOCAL_KEY == localKey
                     select ls);

                return localStringQuery.First().LOCAL_TEXT;
            }
            catch ( Exception ex )
            {
                 ...
            }
            return null;
        }



"   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)\r\n   at lambda_method(ExecutionScope )\r\n   at System.Linq.EnumerableExecutor`1.Execute()\r\n   at System.Linq.EnumerableExecutor`1.ExecuteBoxed()\r\n   at System.Linq.EnumerableQuery`1.System.Linq.IQueryProvider.Execute(Expression expression)\r\n   at IdeaBlade.EntityModel.v4.EntityQuery`1.ExecuteCacheQuery(Guid queryGuid)\r\n   at IdeaBlade.EntityModel.v4.EntityQueryFinder.ExecuteFind(Guid queryGuid)\r\n   at IdeaBlade.EntityModel.v4.EntityQueryFinder.Execute()\r\n   at IdeaBlade.EntityModel.v4.EntityManager.ExecuteQueryCore(IEntityQuery query, Boolean isAsync)\r\n   at IdeaBlade.EntityModel.v4.EntityManager.ExecuteQueryForObject(IEntityQuery query)\r\n   at IdeaBlade.EntityModel.v4.EntityQuery`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)\r\n   at System.Linq.Queryable.First[TSource](IQueryable`1 source)\r\n   at Jenzabar.EX.Infrastructure.Localization.LocalizationProvider.GetValue(String localKey) in C:\\Documents and Settings\\...\\LocalizationProvider.cs:line 79"



Replies:
Posted By: kimj
Date Posted: 16-Jul-2009 at 7:00pm
My guess is that nothing was saved to cache initially, or at least not what you expected.  I'm confused by the block of code used to save cache state - you declare a query and then save cache, but the query has not yet been executed. 


Posted By: AdamC
Date Posted: 17-Jul-2009 at 7:16am
Thanks Kim -- I had not yet executed the query.  Now I feel a little silly.  :-)  I had removed an earlier query and subsequent execution code but never added it back.  I was seeing the cache file being created, but now I realize it doesn't mean actual data was saved.  I think that's what hung me up.  Looking at the cache file in a text editor with and without data shows a big difference.  Thanks again.

For anyone interested in what I changed, please see the line in red:


EntityQuery<LOCAL_STRING> localStringQuery = null;

localStringQuery =
    (from ls in domainEntityManagerService.DomainEntityManager.LOCAL_STRING
    select ls);

localStringQuery.Execute<LOCAL_STRING>();

domainEntityManagerService.DomainEntityManager.CacheStateManager.SaveCacheState("c:\localization.bin");




Print Page | Close Window