Ich habe eine Basisseite mit dem Field1 und SomeBlockDatenmigration für eine riesige Menge an Seiten
public abstract class BasePage : PageData
{
[CultureSpecific]
[Display(Name = "Field1")]
public virtual string Field1 { get; set; }
[Display(Name = "SomeBlock")]
public virtual SomeBlock SomeBlock { get; set; }
}
public class SomeBlock : BlockData
{
[CultureSpecific]
[Display(Name = "Field1")]
public virtual string Field1 { get; set; }
}
Jetzt muss ich die Field1 in SomeBlock innerhalb des Basepage bewegen und verschiebt alle vorhandenen Daten von BasePage.Field1
zu BasePage.SomeBlock.Field1
Zu diesem Zweck es Ich habe einen Job erstellt, der wie folgt aussieht:
private void MigrateFields()
{
var repo = ServiceLocator.Current.GetInstance<IContentRepository>();
var descendents = repo.GetDescendents(_root).Where(p => SafeGetContent(repo, p) is BasePage).Select(repo.Get<BasePage>);
foreach (var basePage in descendents)
{
BasePage writeablePage = (BasePage)basePage .CreateWritableClone();
if (basePage.SomeBlock == null)
basePage.SomeBlock = new SomeBlock();
if (string.IsNullOrWhiteSpace(basePage.SomeBlock.Field1))
{
basePage.SomeBlock.Field1 = basePage.Field1;
}
DataFactory.Instance.Save(writeablePage, SaveAction.Publish, AccessLevel.NoAccess);
}
}
Alles funktioniert gut, wenn ich etwa 1000 Seiten habe. Wenn die Site jedoch> 20000 hat, scheint der Job einfach zu sterben.
Sie könnten auch in * Migrationsschritte * sehen, sie werden häufig verwendet, wenn Eigenschaften geändert/umbenannt werden. –
Danke @TedNyberg, ich werde versuchen –
@TedNyberg Wie ich aus der Dokumentation sehen kann - ich könnte nur die Eigenschaft oder den Inhaltstyp umbenennen. Aber hier sollte ich Property auf den Block –