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

时间:2014-05-30 08:37:47

标签: c# asp.net-mvc-4 caching nhibernate

使用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和缓存。

有2个相关方法

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)

几分钟后,如果刷新页面,则会显示新记录。

1 个答案:

答案 0 :(得分:0)

继承人的回答

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清除缓存并检查数据库。

我无法证实这一点,但这似乎至少可以解决这个问题,如果有人能够告诉我为什么以前的方法没有奏效,那么交换我确认的答案