我正在尝试使用以下代码更新特定部分:
var nationalPart = _contentManager.Get<NationalPart>(Id);
nationalPart.Name = part.Name;
我已经完成了这个。但是现在它没有工作。即使我明确地打电话给contentManager.Flush()
,但仍然没有运气。谁能帮我这个?
提前谢谢。
编辑:我发现问题的根源所在! 当我发出更新contentPart的JSON请求时,内存版本正在更新,但它没有将结果反映给db.now我们离答案又近了一步。但是什么阻止会话更新数据库?
EDIT2:
这是我的处理程序的代码:
public NationalPartHandler(IRepository<NationalPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
这是Controller Action的代码:
[GridAction(EnableCustomBinding = true)]
public JsonResult UpdateNational(NationalViewModel Model, GridCommand Command)
{
if (!ModelState.IsValid)
return new JsonResult { Data = "error" };
var NationalPart = _contentmanager.Get(Model.Id).As<NationalPart>();
NationalPart.Record = new NationalPartRecord();
NationalPart.Record.MapFrom<NationalPartRecord, NationalViewModel>(Model);
_soccerService.UpdateNational(NationalPart);
return NationalsListJson(Command);
}
最后是服务代码:
public void UpdateNational(NationalPart part)
{
var nationalPart = _contentManager.Get<NationalPart>(part.Id);
nationalPart.Name = part.Name;
_contentManager.Flush();
}
答案 0 :(得分:6)
删除行
NationalPart.Record = new NationalPartRecord();
底层记录是自动生成的并且是代理的,因此每当您对数据库进行任何更改时,NHibernate都可以将数据保存到数据库中。您不想替换它,否则将无法保存数据。
UpdateNational
是多余的,您可以将其删除 - 您在调用part.Name
期间已经设置record.MapFrom
(如果我理解正确,应该映射到part.Record.Name)。
所以正确的版本看起来像这样
[GridAction(EnableCustomBinding = true)]
public JsonResult UpdateNational(NationalViewModel Model, GridCommand Command)
{
if (!ModelState.IsValid)
return new JsonResult { Data = "error" };
var part = _contentmanager.Get(Model.Id).As<NationalPart>();
part.Record.MapFrom<NationalPartRecord, NationalViewModel>(Model);
return NationalsListJson(Command);
}
鉴于您的NationalPart看起来类似于:
public NationalPart : ContentPart<NationalPartRecord>
{
public string Name {
get { return Record.Name; }
set { Record.Name = value; }
}
}
总结 - 如果您想在Orchard中存储一些数据,您只需设置记录某些属性的值,仅此而已。数据将在请求结束时保留(或者更早,如果您调用IContentManager.Flush()
)。