C# 如何在没有管理员视图的情况下在orcharc中保存设置记录

C# 如何在没有管理员视图的情况下在orcharc中保存设置记录,c#,settings,orchardcms,updates,C#,Settings,Orchardcms,Updates,我有一个设置记录,其中一些字段通过管理面板进行维护。但是,我正在实现数据导入,需要跟踪上次导入的时间。因此,我将该字段添加到我的设置记录中,并创建了一个导入数据的控制器。现在,我的问题是,如何更新设置?我已经创建了一个服务,但不知道如何强制orchard保存这些值 public class BmobileSettingsService : IBmobileSettingsService { IOrchardServices _svc; public BmobileSettings

我有一个设置记录,其中一些字段通过管理面板进行维护。但是,我正在实现数据导入,需要跟踪上次导入的时间。因此,我将该字段添加到我的设置记录中,并创建了一个导入数据的控制器。现在,我的问题是,如何更新设置?我已经创建了一个服务,但不知道如何强制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?
    }

数据无法持久保存到数据库中。

我相信贝特朗·勒罗伊的评论已经回答了这个问题。
我不认为你需要强迫任何事情

这是一个允许用户使用Orchard 1.8注册的示例:

var site = _siteService.GetSiteSettings();
var regsettings = site.As<RegistrationSettingsPart>();
regsettings.UsersCanRegister = true;
var site=\u siteService.GetSiteSettings();
var regsettings=site.As();
regsettings.UsersCanRegister=true;
设置值后无需调用任何方法。

这就是说,如果你有一个记录你的部分,你可能会使用一个IRepository和调用更新它。在旧版本的Orchard中,在IRepository上调用Update可能会强制更新。但是,如果您使用的是最新版本的Orchard,则不需要这样做,并且可能需要进行错误报告。

只需设置部件的属性即可。就是这样。设置值不起作用,因为更改不会持久化到数据库中,这就是我正在尝试做的。此过程只能在管理仪表板中启动,但它不是正常的设置视图,也不能通过处理程序运行。我正在运行Orchard 1.6.1。如果它没有持续,几乎肯定意味着事务被回滚。检查日志,您可能会在其中看到异常。另外,永远不要使用
Flush
。我尝试过使用IRepository,但似乎无法让它发挥作用。我相信正如Bertrand Le Roy所说,你甚至不应该使用IRepository(非常确定1.6.1没有我所想的bug)。正如他所建议的,你应该首先检查你的日志。如果你仍然不走运,我会尝试从CurrentSite获取零件并使用IRepository更新它。或者在IRepository上调用create。
                // update the last imported date
                var rec = _bmobileSettings.Get();
                rec.LastImageSyncDate = DateTime.Today;
                _bmobileSettings.Save(rec);
var site = _siteService.GetSiteSettings();
var regsettings = site.As<RegistrationSettingsPart>();
regsettings.UsersCanRegister = true;