2012-10-15 131 views
5

我想更新与下面的代码的特定部分:更新Orchard中ContentItem的正确方法是什么?

var nationalPart = _contentManager.Get<NationalPart>(Id);  
nationalPart.Name = part.Name; 

我已经做了this.but现在它不是working.even我打电话contentManager.Flush()明确,但仍没有运气。谁能帮我这个? 在此先感谢。

编辑:我发现我的问题来自哪里! 当我做一个JSON请求来更新一个contentPart.the在内存中的版本正在更新,但它不反映结果db.now我们离答案更近一步。但什么是阻止会话更新数据库?

EDIT2:

这是对我的处理程序代码:

 public NationalPartHandler(IRepository<NationalPartRecord> repository) 
     { 
      Filters.Add(StorageFilter.For(repository)); 
     } 

这是控制器动作代码:

[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

您是否记得让您的零件属性setter在您的记录类中设置属性的值?我以前已经忘记了这一点。 –

+0

如果它不起作用,您可能会在某处回滚事务。检查app_data \ logs。 –

+0

@BertrandLeRoy我有双重检查日志目录。但它是空的(没有错误)。 –

回答

6

删除行

NationalPart.Record = new NationalPartRecord(); 

基础记录自动生成,并代理这样的NHibernate可以将数据保存到数据库中,每当你做任何改变它。你不想取代那个,否则没有数据会被保存。

UpdateNational是多余的,你可以删除它 - 你已经有part.Name(如果我理解正确,应该映射到part.Record.Name)在调用record.MapFrom期间设置。

所以正确的版本是这样的

[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; } 
    } 
} 

汇总 - 如果你想存储在果园一些数据,所有你需要做的就是以设置一个记录的某个属性值,仅此而已。数据将在请求结束时持续存在(或者如果您致电IContentManager.Flush(),则会更早)。

+0

非常感谢你。事实上,该行是一个愚蠢的代码,我忘了删除。 –

+0

@BehnamEsmaili没问题,发生;)很高兴它帮助。 –

+0

@Piotr Szmyd Today方法Flush()在接口IContentManager中不存在。你能给我们一个更新的选项吗? –

相关问题