hibernate,插入后,选择的表结果是旧的

本文关键字:结果是 选择 插入 hibernate | 更新日期: 2023-09-27 18:05:57

使用MS VS 2012, c# .net, Nhibernate。

我正在插入一个新行。

[HttpPost]
    public ActionResult AddQuestion(ModuleAddQuestionModel model)
    {
        if (!_moServices.Authoriser.Authorise(AcademyPermissions.AccessDeveloperArea))
            return new HttpUnauthorizedResult();
        if (model == null)
            return HttpNotFound();
        int modelId = 0;
        var module = _moduleService.GetModule(model.ModuleId);
        // if null
        
        if(model != null)
        {
            modelId = model.ModuleId;
        }
        
        var addQuestion = new Question()
        {
            Text = model.Question,
            QuestionType = model.QuestionType,
            Published = model.Published,
            Country = module.Country,
            Module = module
        };
        _moduleService.SaveQuestion(addQuestion);
        
        
        return RedirectToAction(
            "Edit",
            "Module",
            new { Id = modelId }
            );
    }

重定向调用

public ActionResult Edit(int Id) {
        if (!_moServices.Authoriser.Authorise(AcademyPermissions.AccessDeveloperArea))
            return new HttpUnauthorizedResult();
        var module = _moduleService.GetModule(Id);
        if(module == null)
            return HttpNotFound();
        var model = new ModuleEditModel {
            Id = module.Id,
            Name = module.Name,
            Questions = module.Questions
                .Where(x => !x.Deleted)
                .Select(x => new ModuleEditModel.ModuleQuestionModel {
                    Id = x.Id,
                    Question = x.Text
                }).ToList(),
            Videos = module.Videos.Select(x => new ModuleEditModel.ModuleVideoModel {
                    Id = x.Id,
                    Title = x.Name
                }).ToList()
        };
        return View(model);
    }

如果视图显示结果,它应该显示一个包含新行的列表,但即使在f5之后也没有。我怀疑它是缓存,但是我们在整个过程中没有涉及任何缓存。下一步是研究Nhibernate和缓存。

有两个相关的方法

public Module GetModule(int id) {
        _moduleRepository.Flush();
        return _moduleRepository.Get(id);
    }
public void SaveQuestion(Question question) {
        if (question.Id > 0)
            UpdateQuestion(question);
        else
            InsertQuestion(question);
    }
    public void InsertQuestion(Question question) {
        _questionRepository.Create(question);
        _questionRepository.Flush();
        _signals.Trigger(ModuleSignalChanged);
    }

.flush命令是我最近添加的,看看它是否有助于清除结果,但没有改变任何东西。

查看了Isession.Clear();,但据我了解,在我们的cms中,这超出了范围。

我想知道这里有什么问题,我在正确的通道上吗?这是NHibernate缓存问题吗?有人能提供解决方案吗?

如果你需要任何额外的信息,请告诉我。

附加信息:

是插入填充数据库(MS SQL server 2008)

在几分钟后出现,如果刷新页面,则显示新的记录

hibernate,插入后,选择的表结果是旧的

答案在这里

var addQuestion = new Question()
        {
            Text = model.Question,
            QuestionType = model.QuestionType,
            Published = model.Published,
            Country = module.Country,
            Module = module
        };
        module.Questions.Add(addQuestion);
        _moduleService.UpdateModule(module);

不是试图插入一个问题,而是更新了模块,而不是问题是的子元素。我假设这是级联的,因为这种关系迫使nhibernate清除缓存并检查DB。

我不能确认这一点,但这似乎至少解决了这个问题,如果有人能告诉我为什么以前的方法不起作用,我会交换我确认的答案