1

Orchard サイトを 1.3.9 から 1.7 にアップグレード中です。

アップグレードモジュールを使用していますが、ルート (最後のタブ) をアップグレードしようとすると、新しく作成された 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();

このコード スニペットは、AutoroutePartTitlePartを手元の型に割り当てることになっています (これはPageですが、[Routes] タブのチェックボックス リストにある他の型であるとしましょう)。しかし、そうはなりません。なぜなら、課題は後で

var autoroutePart = ((ContentItem)content).As<AutoroutePart>();

にアクセスしようとするautoroutePartと、コードがエラーで失敗します。Object reference not set...autoroutePart.ContentItem.Id

最終的にSettings_ContentTypePartDefinitionRecord、ページ (ContentType ID 2) を Autoroute および Title パーツ ID にマップするレコードをテーブルに手動で入力することで、それを回避することができましたが、それは厄介でエラーが発生しやすいようで、何かを見逃していたに違いありません (言うまでもなく、このハックを残りのコンテンツ タイプに適用します)。

AlterTypeDefinitionこれらのレコードがデータベースに適用されない原因は何ですか?

4

1 に答える 1