gpt4 book ai didi

Nhibernate QueryOver 不获取最新的数据库更改

转载 作者:行者123 更新时间:2023-12-04 01:10:35 27 4
gpt4 key购买 nike

我正在尝试使用 QueryOver 从数据库更新记录.
我的代码最初创建一个实体并保存在数据库中,然后在数据库外部更新相同的记录(来自其他程序,手动或在其他机器上运行的相同程序),当我调用 queryOver 时按更改的字段过滤,查询获取记录但没有最新更改。
这是我的代码:

//create the entity and save in database
MyEntity myEntity = CreateDummyEntity();
myEntity.Name = "new_name";

MyService.SaveEntity(myEntity);

// now the entity is updated externally changing the name property with the
// "modified_name" value (for example manually in TOAD, SQL Server,etc..)

//get the entity with QueryOver
var result = NhibernateHelper.Session
.QueryOver<MyEntity>()
.Where(param => param.Name == "modified_name")
.List<T>();
上一条语句得到一个只有一条记录的集合(好), 但是 已建立 name 属性 使用旧值 而不是“修改名称”。
我该如何解决这种行为?一级缓存打扰我了?同样的问题发生在
CreateCriteria<T>();
由于应用程序框架要求,我的 NhibernateHelper 中的 session 在任何时候都不会关闭,只会为与 session.Save() 关联的每个提交创建事务。
如果我打开一个新 session 来执行查询,显然我会从数据库中获得最新的更改,但是设计要求不允许这种方法。
我还检查了 NHibernate SQL 输出,正在执行带有 WHERE 子句的选择(因此 Nhibernate 命中数据库)但不更新返回的对象!!!!
更新
这是调用 session.Save 后 SaveEntity 中的代码:调用 Commit 方法完成
public virtual void Commit() 
{
try
{
this.session.Flush();
this.transaction.Commit();
}
catch
{
this.transaction.Rollback();
throw;
}
finally
{
this.transaction = this.session.BeginTransaction();
}
}
NHibernate 为 SaveEntity 生成的 SQL:
NHibernate: INSERT INTO MYCOMPANY.MYENTITY (NAME) VALUES (:p0);:p0 = 'new_name'. 
NHibernate 为 QueryOver 生成的 SQL:
NHibernate: SELECT this_.NAME as NAME26_0_ 
FROM MYCOMPANY.MYENTITY this_
WHERE this_.NAME = :p0;:p0 = 'modified_name' [Type: String (0)].
由于公司 secret 政策,查询已被修改。
非常感谢帮助。

最佳答案

据我所知,您有几种选择:

  • 将您的 session 设为 IStatelessSession , 调用 sessionFactory.OpenStatelesSession()而不是 sessionFactory.OpenSession()
  • 执行 Session.Evict(myEntity)在数据库中持久化实体后
  • 执行 Session.Clear()在您之前 QueryOver
  • 设置 CacheMode您的 session 到 Ignore, Put or Refresh在您之前 QueryOver (从未测试过)

  • 我想这个选择将取决于您对长时间运行的 session 的使用情况(恕我直言,这似乎带来了比解决方案更多的问题)

    关于Nhibernate QueryOver 不获取最新的数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15804514/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com