webForumDet fria alternativet

Cache helt objekt

2 svar · 387 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

Jag vill mellanlagra en hel entityklass för att slippa anropa databas varje gång.
Är detta en korrekt metod? Trådsäkert?

aspx

        UserBll bll = new UserBll();
        User user = bll.GetUser(HttpContext.Current.User.Identity.Name);
        Response.Write(user.Suppliers[0].Name);

bll

        public User GetUser(string userName)
        {
            if (HttpContext.Current.Cache["User"] != null)
            {
                return (User)HttpContext.Current.Cache["User"];
            }
            else
            {
                UserDao dao = new UserDao();
                User User = dao.GetUser(userName);
                HttpContext.Current.Cache["User"] = User;
                return User;
            }
        }

Om cache innehåller en Userklass så returneras den rakt av utan att jämföra användarnamn. Men det måste väl vara ok eller?
För inte kan väl en annan användare få tillgång till just denna cache? :stud

freguzMedlem sedan feb. 2005280 inlägg
#2

Jo Current.Cache["User"] blir ju samma för alla, som jag ser det.

För att istället få det användarunikt kan man ju:

        public User GetUser(string userName)
        {
            if (HttpContext.Current.Cache[userName] != null)
            {
                return (User)HttpContext.Current.Cache[userName]; // cache nyckeln blir unik per user
            }
            else
            {
                UserDao dao = new UserDao();
                User User = dao.GetUser(userName);
                HttpContext.Current.Cache.Add(userName, User, null, DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration,
                System.Web.Caching.CacheItemPriority.NotRemovable, null); // Lagra i cache i x antal minuter       
                return User;
            }
        }
doggelitoMedlem sedan juni 20003 076 inlägg
#3

Aha! Vilken tur jag frågade då! För jag var rätt säker på att det hade fungerat! :)
Tack frequz! :bire

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)