2015-05-12 2 views
0

Я пытаюсь построить модуль со следующим в миграции:Orchard CMS: ContentPart не добавил к ContentItem миграции

public class XyzzyPartRecord : ContentPartRecord 
    { 
     public virtual string Plugh { get; set; } 
    } 

    public class XyzzyPart : ContentPart<XyzzyPartRecord> 
    { 
     public string Plugh { 
      get { return Retrieve(r => r.Plugh); } 
      set { Store(r => r.Plugh, value); } 
     } 
    } 

    public int Create() { 

     SchemaBuilder.CreateTable("XyzzyPartRecord", table => table 
      .ContentPartRecord() 
      .Column<string>("Plugh") 
     ); 

     ContentDefinitionManager.AlterPartDefinition("XyzzyPart", cfg => cfg 
      .WithDescription("XyzzyPart")); 

     ContentDefinitionManager.AlterTypeDefinition("XyzzyItem", cfg => cfg 
      .WithPart("XyzzyPart") 
     ); 

     return 1; 
    } 

При обращении к XyzzyItem, нет XyzzyPart в коллекции частей. Вместо этого есть ContentPart.

Как я могу получить свою часть контента, чтобы добавить ее в коллекцию деталей элемента контента?

+0

Вам не следует пытаться создавать элементы такого типа, которые вы только что создали, прежде чем миграция закончится. В общем, миграции не подходят для создания содержимого. Рецепты - это то, где это должно быть сделано. –

+0

Я отредактировал вопрос, чтобы лучше отразить проблему, с которой я сталкиваюсь. –

ответ

0

Я не обращал внимания на то, чтобы создать для меня роль водителя или обработчика. Как только они были на месте, мой код работал, как ожидалось.

namespace MyProject.Drivers { 

    public class XyzzyPartDriver : ContentPartDriver<XyzzyPart> { 

     protected override DriverResult Display(XyzzyPart part, string displayType, dynamic shapeHelper) { 
      return ContentShape("Parts_Xyzzy", 
       () => shapeHelper.Parts_Xyzzy(
        Xyzzy: part)); 
     } 
    } 
} 

namespace MyProject.Handlers { 

    public class XyzzyPartHandler : ContentHandler { 

     public XyzzyPartHandler(IRepository<XyzzyPartRecord> repository) { 
      Filters.Add(StorageFilter.For(repository)); 
     } 
    } 
}