【发布时间】:2014-04-14 14:48:58
【问题描述】:
我正在将 Orchard 网站从 1.3.9 升级到 1.7。
我正在使用 Upgrade 模块,当尝试升级 Routes(最后一个选项卡)时,代码在尝试访问新创建的 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();
这段代码 sn-p 应该为手头的类型分配一个 AutoroutePart 和一个 TitlePart (假设它是一个 Page 但是显然“路由”选项卡的复选框列表中的任何其他类型)。但它没有这样做。因为后来的任务
var autoroutePart = ((ContentItem)content).As<AutoroutePart>();
失败并且autoroutePart 为空,然后代码在尝试访问autoroutePart.ContentItem.Id 时失败并出现Object reference not set... 错误。
最终我能够通过在表Settings_ContentTypePartDefinitionRecord 中手动输入一条记录来绕过它,该记录将页面(ContentType ID 2)映射到自动路由和标题部分 ID,但这看起来很尴尬且容易出错,而且我一定错过了一些东西(更不用说必须将此 hack 应用于其他内容类型)。
什么会导致AlterTypeDefinition 无法将这些记录应用到数据库中?
【问题讨论】:
-
虽然很痛苦,但您可能想先尝试迁移到 1.4。
-
@BertrandLeRoy 如果是这样,有人可能需要更新docs.orchardproject.net/Documentation/Orchard-1-7-Release-Notes 的说明....顺便说一句,感谢您提供的出色产品!
-
它适用于大多数人。很抱歉,它不适合你。
-
无论升级过程如何,我提供的代码 sn-p 似乎都存在明显的错误。应该发生了一件非常具体的事情,但由于某种原因没有发生(在表 Settings_ContentTypePartDefinitionRecord 中创建多对多记录)
-
我不清楚,但如果你想用精确的重现步骤提交错误,请这样做。