0

StackOverflow の友人の皆さん、キャッシュされたクエリを使用して、いくつかの nhibernate エンティティをキャッシュできるようにしたい状況があります。MVC 4 プロジェクトでこれを構成する最良の方法を見つけようとしています。私のNHibernateレイヤーは別のレイヤーにあり、DIにWindsorを使用しています。

以下のことができるようになりたいと思います。たとえば、データベースに UserTypes テーブルがあるとします。PK は GUID/一意の識別子です。このデータが必要になるたびに選択の料金を支払う代わりに、Session.Load(guid) を実行できるようにしたいと考えています。

ここにいくつかのコードがあります。このようにハードコードされた GUID は好きではありません。GUID を web.config に詰め込むことができると思いますが、何かが変更された場合に備えて、より自動化したいと思います。

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
                                             }
                           });
4

1 に答える 1

1

NHibernate は、第 1 および第 2 レベルのキャッシュをサポートします。第 1 レベルのキャッシュの範囲は、セッション自体に限定されます。ただし、2 番目のレベルのキャッシュは、セッション ファクトリ内のすべてのセッションで使用できます。Ayende Rahien が NHibernate キャッシングに関する詳細な説明をここに投稿しました: http://nhibernate.hibernatingrhinos.com/28/first-and-second-level-caching-in-nhibernate

于 2012-09-01T00:17:03.527 に答える