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)
在几分钟后出现,如果刷新页面,则显示新的记录
答案在这里
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。
我不能确认这一点,但这似乎至少解决了这个问题,如果有人能告诉我为什么以前的方法不起作用,我会交换我确认的答案