2012-04-21 30 views
4

我有一个自定义模块。 Migrations.cs看起来像这样。创建内容错误 - 指定的转换无效

public int Create() 
    { 
     SchemaBuilder.CreateTable("MyModuleRecord", table => table 
      .ContentPartRecord() 
      ... 
     ); 

     ContentDefinitionManager.AlterPartDefinition(
      typeof(MyModulePart).Name, cfg => cfg.Attachable()); 

     ContentDefinitionManager.AlterTypeDefinition("MyModule", 
      cfg => cfg 
       .WithPart("MyModulePart") 
       .WithPart("CommonPart") 
       .Creatable() 
      ); 

     return 1; 
    } 

这是我在控制器中的代码。

var newcontent = _orchardServices.ContentManager.New<MyModulePart>("MyModule"); 
    ... 
    _orchardServices.ContentManager.Create(newcontent); 

我从Orchard.ContentManagement ContentCreateExtensions中的这个New方法中得到无效的转换错误。

public static T New<T>(this IContentManager manager, string contentType) where T : class, IContent { 
     var contentItem = manager.New(contentType); 
     if (contentItem == null) 
      return null; 

     var part = contentItem.Get<T>(); 
     if (part == null) 
      throw new InvalidCastException(); 

     return part; 
    } 

任何想法我做错了什么?

谢谢。

这是处理程序。

public class MyModuleHandler : ContentHandler 
{ 
    public MyModuleHandler(IRepository<MyModuleRecord> repository) 
    { 
     Filters.Add(StorageFilter.For(repository)); 
    } 
} 
+0

您可以发布您的驱动程序/处理程序代码? – mdm 2012-04-22 11:08:47

+0

没有司机。我用Handler代码更新了这篇文章。 – user471317 2012-04-23 14:47:13

回答

7

你得到了InvalidCastException因为内容项目不会出现让你的MyModulePart连接。

如果你有一个驱动程序,那么在某个地方有一个隐含的链接,可以让你的部分显示在内容项上(我不确定这是如何完成的,也许有人可以详细说明 - 但它与Orchard核心内形状表的形状如何收集和拾取有关)。

但是因为你没有驱动程序,添加ActivatingFilter你的部分的处理程序类将明确链接:

public MyModulePartHandler : ContentHandler { 
    public MyModulePartHandler() { 
     Filters.Add(StorageFilter.For(repository)); 
     Filters.Add(new ActivatingFilter<MyModulePart>("MyModule"); 
    } 
} 
+0

谢谢。就是这样,它现在起作用了。 – user471317 2012-04-23 21:31:17

0

您的零件表名是错误的。试试看重命名这个(所以“记录”前的部分完全匹配你的部分型号名称):

SchemaBuilder.CreateTable("MyModulePartRecord", table => table 
     .ContentPartRecord() 
     ... 
    ); 
+0

我不确定这是否是问题。我有另一个模块,其中的表名与上面的格式相同,记录。该模块工作正常。 – user471317 2012-04-23 14:46:39

相关问题