【问题标题】:'Migrate Routes' fail when upgrading from Orchard 1.3.9 to Orchard 1.7从 Orchard 1.3.9 升级到 Orchard 1.7 时“迁移路线”失败
【发布时间】: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 中创建多对多记录)
  • 我不清楚,但如果你想用精确的重现步骤提交错误,请这样做。

标签: orchardcms orchardcms-1.7


【解决方案1】:

我能够通过使用新的交易系统来实现这一点。

这个想法是在需要提交到数据库的每段代码之前和之后调用ITransactionManager.RequireNew()。我的代码示例中的一些调用是多余的,但我认为这段代码只会使用一次,因此我不会尝试优化不需要的调用,而是将它们留在其中以指示事务开始和结束的位置。

提供差异作为要点。

https://gist.github.com/harmony7/10621982

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2012-05-26
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多