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();
このコード スニペットは、AutoroutePartとTitlePartを手元の型に割り当てることになっています (これは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
これらのレコードがデータベースに適用されない原因は何ですか?