NHibernate二级缓存在没有缓存配置的情况下缓存实体

2024-01-20

我已经在会话工厂上配置了二级缓存。但是对于 POCO 实体,我没有启用缓存。

我使用 Fluent NHibernate 来配置 SessionFactory 和 POCO 实体。

这是会话工厂的配置:

            var cfg = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString)
                          .Provider("NHibernate.Connection.DriverConnectionProvider, NHibernate")
                          .Dialect<CustomMsSql2008Dialect>()
                          .Driver<SqlAzureClientDriver>()
                          .ShowSql())
            .Cache(x =>
                {
                    x.UseQueryCache();
                    x.UseSecondLevelCache().ProviderClass<HashtableCacheProvider>().UseMinimalPuts();
                })

POCO实体配置如下:

        public CustomerConfiguration()
    {
        Table("Sys_Customer");
        DynamicUpdate();

        Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);

        Map(x => x.Code);
        Map(x => x.Name);
        Map(x => x.IsActive);
        Component(x => x.Contact).ColumnPrefix("Contact_");
        Component(x => x.Address).ColumnPrefix("Address_");
        Map(x => x.IsDeleted);
        Map(x => x.CreatedOn).Column("CreatedOn");
        Map(x => x.CreatedBy).Column("CreatedBy").Length(100);
        Map(x => x.LastModifiedOn).Column("LastModifiedOn");
        Map(x => x.LastModifiedBy).Column("LastModifiedBy").Length(100);

        Version(x => x.RowVersion).UnsavedValue("0");
    }

显然,对于 Sys_Customer 实体,我没有配置任何缓存,但是当我运行以下代码时:数据库仅被命中一次:

        using (ISession s = RepositorySession)
        {
            var f = s.Get<Customer>(new Guid("75EDC0C2-4E58-43FF-B0D8-8C52FBB2D502"));
            var d = f.Code;
        }

        using (ISession s = RepositorySession)
        {
            var f = s.Get<Customer>(new Guid("75EDC0C2-4E58-43FF-B0D8-8C52FBB2D502"));
            var d = f.Code;
        }

当我从 SessionFactory 中删除缓存配置时,数据库会被命中两次。很明显该实体被缓存在二级缓存中。

有人可以告诉我如何避免将实体缓存到 NHibernate 的二级缓存中吗???


我有配置了二级缓存的 ClassConvention。它看起来如下:

    public class ClassConvention : IClassConvention
{
    /// <summary>
    /// Applies the specified instance.
    /// </summary>
    /// <param name="instance">The instance.</param>
    public void Apply(IClassInstance instance)
    {
        instance.Table(instance.EntityType.Name);
        instance.LazyLoad();
        instance.Cache.NonStrictReadWrite();
    }
}

这导致实体被缓存到二级缓存中。我从 IClassConvention 中删除了配置,现在它按预期工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate二级缓存在没有缓存配置的情况下缓存实体 的相关文章

随机推荐

  • 如何每周发送 100,000 封电子邮件? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 AJAX 请求返回值? [复制]

    这个问题在这里已经有答案了 我有一个函数声明一个变量var关键词 然后 它启动 AJAX 请求来设置变量的值 然后从函数返回该变量 然而 我的实施失败了 我不知道为什么 这是代码的简化版本 function sendRequest some
  • Swift:转换到新场景后取消分配 GameScene?

    所以我读过几个关于这个问题的问题 但大多数都是 Objective C 的 我还没有找到任何直接解决 回答这个问题的问题 我是这里编程的新手 所以请彻底解释任何建议 我需要了解如何解除分配游戏结束后我的游戏场景到达 我需要这样做的原因是因为
  • GridBagLayout 网格化不起作用

    我正在尝试创建以下 GUI 但我制作的 GUI 是 我的网格是什么样的 image 网格布局 https i stack imgur com Wpzna png 我不明白为什么我会得到这个输出 因为我已经绘制了一个图表来帮助代码并且它似乎可
  • Java 使用带有域和安全的 RestTemplate 设置安全 cookie

    除了下面的问题之外 我如何设置 Cookie 域并标记为 安全 尝试在 Cookie 上设置其他属性 使用 RestTemplate 设置安全 cookie https stackoverflow com questions 5796078
  • 从 git 存储库进行 pip 安装,由于引用错误而出现错误

    问题描述 在 Windows 10 上使用 Python 3 7 6 我尝试升级直接从 git 存储库安装的包 pip install upgrade git https url of my py package git 然后安装失败 er
  • 如何读取pickle文件?

    我创建了一些数据并将其存储了几次 如下所示 with open filename a as f pickle dump data f 每次文件大小增加 但是当我打开文件时 with open filename rb as f x pickl
  • Android获取颜色作为字符串值

    如果我在资源中定义了一种颜色
  • F#,主格或结构类型

    F 有主格类型系统还是结构类型系统 我知道 OCaml 是结构类型的 尽管 F 似乎并非如此 这是正确的吗 F 是主格 您可以通过一些奇异的机制执行一些结构技巧 但该语言的类型系统主要是主格的
  • 使用 ESC 键清除 Angular / AngularUI 中的输入文本字段

    在我的 Angular 应用程序的几个地方 我需要使用 ESC 键清除用户的输入 问题是 我不知道如何使用文本输入字段 文本区域清除正常 看看这个小提琴 jsFiddle演示问题 http jsfiddle net aGpNf 188 Bi
  • 在textview中显示计时器包含android中的天,小时,分钟和秒

    我正在使用倒计时器在文本视图中显示剩余时间 它工作正常 下面是代码 public class MyCount extends CountDownTimer Context mContext public MyCount long milli
  • 如何在文本框中选择文本,并将插入符号置于所选内容的开头?

    我正在使用一个System Windows Forms TextBox 可以使用键盘来选择文本 将插入符号置于start选择的内容 按住 Shift 并将插入符号向左移动 我想以编程方式做同样的事情 例如 假设我有一个文本框 其中包含文本
  • 如何在调试器中使用 Perl 5.10 功能?

    我无法在 Perl 调试器中评估 现代 Perl 代码 在调试文件中的代码时它可以正常工作 但在提示符下却不行 最小的例子 Activating 5 10 features with E it works perl E say x x Ca
  • 为什么要为请求缓存控制 HTTP 标头?

    我最近经历了this https developer mozilla org en US docs Web HTTP Headers Cache Control文章 它说不仅是响应 请求还可以包括cache control选项 虽然我理解
  • 低基数字段的索引效率

    例如 postgres 数据库中有一个字段 可以为空 它存储枚举值 并且该枚举只有两个值 A B 现在我的所有选择查询在该字段上都有 where 子句 我有一个问题 向该字段添加索引将是一个好方法 否则它不会提高任何性能 因为每行包含 A
  • 如何在 php 上打印非空值[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对 PHP 很陌生 现在我正在尝试打印非空值 我有以下 php 代码 它会抛出所有值 包括 null 和非 null 在我的网站中 我只
  • 如何检查 JBoss 是否正在 Unix 服务器上运行?

    我下面有一个脚本 我想根据它是否可以在进程列表中找到 jboss 进程来回显 jboss 未运行 或 jboss 正在运行 但是 当我关闭 Jboss 时 它仍然执行 Else 条件并显示 jboss 正在运行 如果我手动执行 pgrep
  • 无法在 C# 中打开 Excel 文件

    我的项目中有以下 C 函数 该函数应该打开并返回现有的 Excel 工作簿对象 Application excelApp private Workbook OpenXL string path string filename try if
  • Rails 4.1.2 - to_param 转义斜杠(并破坏应用程序)

    我在我的应用程序中使用to param创建自定义 URL 此自定义路径包含斜杠 class Machine lt ActiveRecord Base def to param MachinePrettyPath show path self
  • NHibernate二级缓存在没有缓存配置的情况下缓存实体

    我已经在会话工厂上配置了二级缓存 但是对于 POCO 实体 我没有启用缓存 我使用 Fluent NHibernate 来配置 SessionFactory 和 POCO 实体 这是会话工厂的配置 var cfg Fluently Conf