Я занимаюсь обновлением сайта Orchard с 1.3.9 до 1.7.«Миграция маршрутов» сбой при обновлении с Orchard 1.3.9 до Orchard 1.7
Я использую модуль Upgrade, а при попытке обновления маршрутов (последняя вкладка) код выходит из строя, в тот момент, когда он пытается получить доступ к вновь созданной странице AutoroutePart.
В частности, внутри RouteController.IndexPOST()
:
// migrating parts
_contentDefinitionManager.AlterTypeDefinition(contentType,
builder => builder
.WithPart("AutoroutePart")
.WithPart("TitlePart"));
// force the first object to be reloaded in order to get a valid AutoroutePart
_orchardServices.ContentManager.Clear();
Этот фрагмент кода должен назначить AutoroutePart и TitlePart к типу под рукой (скажем, это Page но, очевидно, любой другой тип в списке флажков на вкладке «Маршруты»). Но он этого не делает. Потому что позже по заданию
var autoroutePart = ((ContentItem)content).As<AutoroutePart>();
терпит неудачу и autoroutePart
имеет нулевое значение, а затем дальше код не с Object reference not set...
ошибки, когда он пытается получить доступ к autoroutePart.ContentItem.Id
.
В конце концов я смог обойти его вручную, указав запись в таблице Settings_ContentTypePartDefinitionRecord
, которая сопоставляет страницу (идентификатор ContentType ID 2) с идентификаторами автозапуска и идентификационной информацией, но это кажется неудобным и подверженным ошибкам, и я, должно быть, что-то пропустил (не говоря уже о необходимости применять этот хак к остальным типам контента).
Что может вызвать AlterTypeDefinition
, чтобы не применять эти записи в базе данных?
Болезненные, как это, вы можете попробовать перейти на 1.4 первым. –
@BertrandLeRoy, если это так, кому-то, возможно, потребуется обновить инструкции по адресу http://docs.orchardproject.net/Documentation/Orchard-1-7-Release-Notes .... BTW благодарит за отличный продукт! –
Это работает для большинства людей. Мне жаль, что это не для вас. –