我有一个执行查询的简单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();
}
答案 0 :(得分:1)
尝试添加_contentManager.Publish(updatedPerson)
。如果您不想发布,只是为了保存,则不需要再执行任何操作,因为Orchard中的更改会自动保存,除非环境事务中止。根本不需要致电Flush
。在常规请求和后台任务期间都是这种情况。