IBackgroundTask
クエリを実行し、特定のアイテムが存在するかどうかに応じて、挿入または 1 つ以上の更新を実行する単純な実装があります。ただし、更新は永続化されておらず、その理由がわかりません。予想通り新しいアイテムが作成されます。
更新中のコンテンツ アイテムには があり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();
}