我正在将 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)映射到自动路由和标题部分 ID 的记录来绕过它,但这看起来很尴尬且容易出错,而且我一定错过了一些东西(更不用说不得不将此技巧应用于其余的内容类型)。
什么会导致AlterTypeDefinition
无法在数据库中应用这些记录?