【问题标题】:Set up caching on entities and relationships in Fluent Nhibernate?在 Fluent Nhibernate 中设置实体和关系的缓存?
【发布时间】:2010-12-02 22:24:17
【问题描述】:

有没有人有一个示例如何设置以及在流畅的 nhibernate 中缓存哪些实体。同时使用流利映射和自动映射?

实体关系也是如此,一对多和多对多?

【问题讨论】:

    标签: nhibernate caching fluent


    【解决方案1】:

    我一直在处理类似的情况,我只想缓存特定元素,并希望这些元素在启动时加载一次,并保留在缓存中,直到应用程序关闭。这是一个只读缓存,用于填充国家/地区列表,以便用户可以从列表中选择他们的国家/地区。

    我使用了 fluentNhibernate Mappings,并用 Cache.readonly() 定义了 Country 我的类

    public class CountryMap : ClassMap<Country> {
        public CountryMap() { 
             Schema("Dropdowns");
             Cache.ReadOnly();
             // Class mappings underneath 
        }
    }
    

    我的用户类映射如下所示:

    public class UserMap : ClassMap<User> {
        Id(x => x.Id).Column("UserId");
        Map(x => x.FirstName);
        Map(x => x.LastName);
        References(x => x.Country)
          .Column("CountryId");
    }
    

    我手动配置 Fluent Nhibernate 以使用二级缓存。所以在我流利的配置中,我有:

    var sessionFactory = Fluently.Configure()
        .Database (...) // set up db here
        .Mappings(...)  //set up mapping here
        .ExposeConfiguration(c => {
            // People advice not to use NHibernate.Cache.HashtableCacheProvider for production
            c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
            c.SetProperty("cache.use_second_level_cache", "true");
            c.SetProperty("cache.use_query_cache", "true");
        })
        .BuildSessionFactory();
    

    我已经检查了 SQL 分析器,当我得到一个用户的国家列表时,它们被加载一次,并且在每个其他请求之后我都会得到缓存命中。好消息是当显示用户的国家名称时,它从缓存中加载,而不向数据库发出请求。我从Gabriel Schenker 的这篇帖子中得到了一些提示。希望有帮助吗?如果您找到更好/正确的方法,请告诉我?谢谢!

    【讨论】:

    • 好答案!我也成功地完成了你所做的事情。我更喜欢 Ayende 的 NhProf 进行分析,比 SQL 分析器好得多,但它不是免费的(有试用版)而且它是特定于 NHibernate 的。
    • 是的,我看过一些 NHProf 的屏幕截图,看起来不错。在我们上线之前可以试一试。
    • Gabriel Schenker 的帖子链接现在似乎已损坏。
    • 认为 URL 可能已更改为 nhibernate.hibernatingrhinos.com/28/…
    • 当您获得缓存命中时,您是否在 NHProfiler 中看到任何内容?或者您只是看不到国家数据的更多选择语句? (没有选择意味着它必须使用缓存)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多