使用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)
几分钟后,如果刷新页面,则会显示新记录。
答案 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清除缓存并检查数据库。
我无法证实这一点,但这似乎至少可以解决这个问题,如果有人能够告诉我为什么以前的方法没有奏效,那么交换我确认的答案