Cache helt objekt

.NET

2 svar · 404 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Trådstart#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

Medlem 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;
            }
        }
Medlem 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

253 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)