在运行时缓存Nhibernate实体

时间:2012-09-01 00:00:56

标签: asp.net-mvc-3 nhibernate asp.net-mvc-4

嘿StackOverflow的朋友们, 我有一种情况,我希望能够缓存一些nhibernate entites,最有可能通过缓存查询。我试图找出在MVC 4项目中构建它的最佳方法。我的NHibernate层位于一个单独的层中,我使用Windsor作为我的DI。

我希望能够做到以下几点。比如说我在数据库中有一个UserTypes表,PK是一个GUID / uniqueidentifier。我希望能够做一个Session.Load(guid),而不是每次我需要这些数据时都要付费。

这是一些代码。我不喜欢这样的GUID硬编码。我想我可以在web.config中填充GUID,但是如果有什么变化,我想要更自动的东西,

nhsession.Save(new User
                           {
                               UserType = nhsession.Load<UserType>(Guid.Parse("BE4A74B1-5B21-4109-AD69-A0AF00FC879F")),
                               UserSetting = nhsession.Load<UserSetting>(Guid.Parse("CB0B2053-E173-408D-A991-A09B00E45330")),
                               UserName = userDto.UserName,
                               Password = hash,
                               Salt = salt,
                               IsLockedOut = 0,
                               InvalidLoginAttempts = 0,
                               ActivationCode = activationCode,
                               Active = active,
                               LastLoginDate = DateTime.Now,
                               DateCreated = DateTime.Now,
                               LastUpdated = DateTime.Now,
                               Profile = new Profile
                                             {
                                                 EmailAddress = userDto.UserName, 
                                                 Active = 1, 
                                                 DateCreated = DateTime.Now, 
                                                 LastUpdated = DateTime.Now
                                             }
                           });

1 个答案:

答案 0 :(得分:1)

NHibernate支持一级和二级缓存。第一级缓存的范围仅限于会话本身。但是,第二级缓存可用于会话工厂中的所有会话。 Ayende Rahien在这里发布了有关NHibernate缓存的详细说明:http://nhibernate.hibernatingrhinos.com/28/first-and-second-level-caching-in-nhibernate