4

我有一个简单的IBackgroundTask实现,它执行查询,然后根据特定项目是否存在执行插入或一个或多个更新。但是,更新没有持久化,我不明白为什么。新项目按预期创建。

我正在更新的内容项有一个CommonPart,并且我尝试过以有效用户身份进行身份验证。我还尝试在Sweep方法结束时刷新内容管理器。我错过了什么?

这是我的Sweep,为简洁起见略作编辑:

public void Sweep()
{
    // Authenticate as the site's super user
    var superUser = _membershipService.GetUser(_orchardServices.WorkContext.CurrentSite.SuperUser);
    _authenticationService.SetAuthenticatedUserForRequest(superUser);

    // Create a dummy "Person" content item
    var item = _contentManager.New("Person");
    var person = item.As<PersonPart>();
    if (person == null)
    {
        return;
    }
    person.ExternalId = Random.Next(1, 10).ToString();
    person.FirstName = GenerateFirstName();
    person.LastName = GenerateLastName();

    // Check if the person already exists
    var matchingPersons = _contentManager
        .Query<PersonPart, PersonRecord>(VersionOptions.AllVersions)
        .Where(record => record.ExternalId == person.ExternalId)
        .List().ToArray();
    if (!matchingPersons.Any())
    {
        // Insert new person and quit
        _contentManager.Create(item, VersionOptions.Draft);
        return;
    }

    // There are at least one matching person, update it
    foreach (var updatedPerson in matchingPersons)
    {
        updatedPerson.FirstName = person.FirstName;
        updatedPerson.LastName = person.LastName;
    }

    _contentManager.Flush();
}
4

1 回答 1

1

尝试添加_contentManager.Publish(updatedPerson). 如果您不想发布,而只是为了保存,则无需执行任何其他操作,因为 Orchard 中的更改会自动保存,除非环境事务被中止。Flush根本不需要调用 to 。在常规请求和后台任务中都是这种情况。

于 2013-02-05T16:52:22.077 回答