5

我正在尝试使用以下代码更新特定部分:

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

我已经这样做了。但现在它不起作用。即使我contentManager.Flush()明确地打电话,但仍然没有运气。谁能帮我这个?提前致谢。

编辑:我发现我的问题来自哪里!当我发出更新 contentPart 的 JSON 请求时。内存中的版本正在更新,但它没有将结果反映到 db。现在我们离答案更近了一步。但是是什么阻止了会话更新 db?

编辑2:

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

        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();
}
4

1 回答 1

6

删除线

NationalPart.Record = new NationalPartRecord();

底层记录是自动生成并被代理的,因此 NHibernate 可以在您对其进行任何更改时将数据保存到数据库中。您永远不想替换它,否则将不会保存任何数据。

UpdateNational是多余的,您可以将其删除 -part.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; }
    }
}

总结 - 如果您想在 Orchard 中存储一些数据,您需要做的就是设置记录的某些属性的值,仅此而已。数据将在请求结束时(或更早,如果您调用IContentManager.Flush())持久化。

于 2012-10-16T09:23:14.477 回答