2013-02-04 36 views
4

我有一個簡單的IBackgroundTask執行,執行一個查詢,然後執行一個插入或一個或多個更新,具體取決於特定項目是否存在。但是,更新不是持久的,我不明白爲什麼。 新項目按預期創建。如何從Orchard的後臺任務更新內容項目(草稿)?

我正在更新的內容項目有一個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(); 
} 
+1

app_data \ logs中的任何異常? –

+0

沒有。這個日期有一個錯誤的.log文件,但它是空的。 –

回答

1

嘗試添加_contentManager.Publish(updatedPerson)。如果您不想發佈,但只是爲了保存,您不需要做更多的事情,因爲Orchard中的更改會自動保存,除非環境事務被中止。對Flush的呼叫根本就沒有必要。在定期請求和後臺任務期間都是如此。

+0

但我不想公佈它,我想更新草稿... –

+1

然後它應該只是工作,不需要刷新。相同的代碼是否在常規控制器中工作,而不是在後臺任務中工作? –

+0

好吧,我現在覺得自己像一個白癡 - 我發佈的代碼的作品。在我的實際程序中,模型有更多的屬性,其中一些屬性沒有在後臺任務中設置。恰巧,當我檢查更新是否被保存時,我查看了這些屬性......我忘記了註釋掉的代碼。 –

相關問題