4

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();
}
4

1 に答える 1

1

を追加してみてください_contentManager.Publish(updatedPerson)。公開するのではなく保存するだけの場合は、アンビエント トランザクションが中止されない限り、Orchard での変更は自動的に保存されるため、それ以上の操作は必要ありません。への呼び出しFlushは一切必要ありません。これは、通常のリクエスト時とバックグラウンド タスクの両方に当てはまります。

于 2013-02-05T16:52:22.077 に答える