我试图自定义 Orchard.ContentManagement.DefaultContentManager
执行的查询,但以下代码 *1
使我的努力变得毫无用处:
class DefaultContentManager
{
...
public virtual ContentItem Get(int id, VersionOptions options, QueryHints hints) {
...
// implemention of the query comes here
...
*1 -> // no record means content item is not in db
if (versionRecord == null) {
// check in memory
var record = _contentItemRepository.Get(id);
if (record == null) {
return null;
}
versionRecord = GetVersionRecord(options, record);
if (versionRecord == null) {
return null;
}
}
该查询是正确执行的,并且不会返回任何数据(这是我的目标),但后来执行第二次尝试*1
仍获取内容项。
为什么那里的代码部分?它的目的是什么?另外,为什么要查询评论状态check in memory
,然后查询存储库(db表)。
在这一点上已经验证了该项目在数据库中不存在,但是在同一请求期间,它可能只是从代码创建的。在这种情况下,NHIBERNATE会话具有该项目,但是数据库还没有。存储库访问了会话,而不是直接登录DB,因此,如果它在那里,它将检索它,但这会在内存中发生。