我有一个设置记录,一些字段通过管理面板得到维护。但是,我正在实现数据导入,并且需要跟踪上一次导入发生的时间。因此,我将该字段添加到设置记录中,并创建了一个导入数据的控制器。现在,我的问题是,如何更新设置?我已经创建了一个服务,但是不知道如何强制orchard保存值。
public class BmobileSettingsService : IBmobileSettingsService
{
IOrchardServices _svc;
public BmobileSettingsService(IOrchardServices svc)
{
_svc = svc
}
public BmobileSettingsPart Get()
{
return _svc.WorkContext.CurrentSite.As<BmobileSettingsPart>();
}
public void Save(BmobileSettingsPart part)
{
/// how do I save the data?
}
下面是我在使用存储库时使用的代码:
public class BmobileSettingsService : IBmobileSettingsService
{
IOrchardServices _svc;
IRepository<BmobileSettingsPartRecord> _repository;
public BmobileSettingsService(IOrchardServices svc,IRepository<BmobileSettingsPartRecord> repository)
{
_svc = svc;
_repository = repository;
}
public BmobileSettingsPartRecord Get()
{
return _repository.Table.FirstOrDefault();
//return _svc.WorkContext.CurrentSite.As<BmobileSettingsPart>();
}
public void Save(BmobileSettingsPartRecord part)
{
_repository.Update(part);
_repository.Flush();
}
}
下面是对服务的调用:
// update the last imported date
var rec = _bmobileSettings.Get();
rec.LastImageSyncDate = DateTime.Today;
_bmobileSettings.Save(rec);
数据只是没有被持久化到数据库。
我相信Bertrand Le Roy在评论中已经回答了这个问题。
我认为你不需要强迫任何事情。
这是一个允许用户使用Orchard 1.8注册的例子:
var site = _siteService.GetSiteSettings();
var regsettings = site.As<RegistrationSettingsPart>();
regsettings.UsersCanRegister = true;
设置值后不需要调用任何方法。
也就是说,如果你的部分有一个记录,你可以使用IRepository并对其调用update。在旧版本的Orchard中有一些bug,在IRepository上调用Update可以强制更新。但是,如果您使用的是最新版本的Orchard,那么这不应该是必需的,并且可能会导致错误报告。