2012-03-30 13 views
1

Bei meinem Obstgarten-Modul funktioniert alles gut, aber leider wird die Datenbank nicht aktualisiert.Orchard CMS - Handler aktualisiert die Datenbank nicht

ich die Ansicht für den Admin-Panel auf Orchard.Web \ Modules \ Course \ Views definiert haben \ EditorTemplates \ Teile \ Course.cshtml als Gebrüll:

@model Course.Models.CoursePart 

<fieldset> 
    <legend>Course Fields</legend> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Title) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Title) 
    @Html.ValidationMessageFor(model => model.Title) 
    </div> 

    <div class="editor-label"> 
    @Html.LabelFor(model => model.Description) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.Description) 
    @Html.ValidationMessageFor(model => model.Description) 
    </div> 


    <div class="editor-label"> 
    @Html.LabelFor(model => model.ImagePath) 
    </div> 
    <div class="editor-field"> 
    @Html.TextBoxFor(model => model.ImagePath) 
    @Html.ValidationMessageFor(model => model.ImagePath) 
    </div> 


</fieldset> 

und der Fahrer als Gebrüll:

public class CourseDriver : ContentPartDriver<CoursePart> 
    { 
     protected override DriverResult Display(CoursePart part, 
             string displayType, 
             dynamic shapeHelper) 
     { 

      return ContentShape("Parts_Course", 
       () => shapeHelper.Parts_Course(
       Description: part.Description, 
       Title: part.Title, 
       ImagePath: part.ImagePath, 
       Area: part.Area 
       )); 
     } 

     //GET 
     protected override DriverResult Editor(CoursePart part, 
               dynamic shapeHelper) 
     { 

      return ContentShape("Parts_Course_Edit", 
       () => shapeHelper.EditorTemplate(
        TemplateName: "Parts/Course", 
        Model: part, 
        Prefix: Prefix)); 
     } 

     //POST 
     protected override DriverResult Editor(CoursePart part, 
               IUpdateModel updater, 
               dynamic shapeHelper) 
     { 
      updater.TryUpdateModel(part, Prefix, null, null); 
      return Editor(part, shapeHelper); 
     } 
    } 

Und der Handler:

namespace Course.Handlers 
{ 
    public class CourseHandler: ContentHandler 
    { 
      public CourseHandler(IRepository<CourseRecord> repository) 
      { 
       Filters.Add(StorageFilter.For(repository)); 
      } 

    } 
} 

die Die unten beschriebene Migrationsklasse befindet sich unter der Datei Orchard.Web \ Modules \ Course \ Migrations.cs.

namespace Course { 
    public class Migrations : DataMigrationImpl { 

     public int Create() { 
      // Creating table CoursePartRecord 
      SchemaBuilder.CreateTable("CourseRecord", table => table 
       .ContentPartRecord() 
       .Column("Area", DbType.String) 
       .Column("Description", DbType.String) 
       .Column("Title", DbType.String) 
       .Column("ImagePath", DbType.String) 
      ); 

      //Add the AlterPartDefinition lines to the migration in order to make the part 
      //attachable to any content type. 
      ContentDefinitionManager.AlterPartDefinition(
       typeof(CoursePart).Name, cfg => cfg.Attachable()); 

      return 1; 
     } 

     public int UpdateFrom1() 
     { 
      ContentDefinitionManager.AlterTypeDefinition("CourseContent", cfg => cfg 
       .WithPart("CommonPart") 
       .WithPart("RoutePart") 
       .WithPart("BodyPart") 
       .WithPart("CoursePart") 
       .WithPart("CommentsPart") 
       .WithPart("TagsPart") 
       .WithPart("LocalizationPart") 
       .Creatable() 
       .Indexed()); 
      return 2; 
     } 
    } 
} 

Die Modelle werden unten beschrieben:

namespace Course.Models 
{ 
    public class CourseRecord : ContentPartRecord 
    { 
     public virtual String Area { get; set; } 

     public virtual String Description { get; set; } 
     public virtual String Title { get; set; } 

     public virtual String ImagePath { get; set; } 

    } 


    public class CoursePart : ContentPart<CourseRecord> 
    { 
     public String Area { get; set; } 
     [Required] 
     public String Description { get; set; } 
     [Required] 
     public String Title { get; set; } 
     public String ImagePath { get; set; } 
    } 
} 

I die Schritte gemäß dem Beispiel in der Dokumentation Orchard folgenden wurde: http://docs.orchardproject.net/Documentation/Writing-a-content-part.

Problem: Die Datenbank wird nicht erstellt oder aktualisiert werden, jede Eigenschaft aus dem Datensatz mit Nullwerten aktualisiert wird, wird die repository.Table in CourseHandler Methode Rückkehr immer eine Liste.

Mit freundlichen Grüßen, Tito

+0

Können Sie zeigen uns Ihre Migrationen Klasse und Ihre CourseRecord Klasse? – mdm

+0

@mdm, jetzt habe ich es bereits hinzugefügt. Danke, dass du es bemerkt hast. – Tito

Antwort

1

Dank Kommentar @mdm, die mir einen Hinweis gab, und ich habe einen Blick wieder auf meinem Code Migration Code. Und die Klasse CoursePart wurde falsch definiert, da sie nicht vom Datensatz geschrieben oder gelesen wurde.

Wenn ich es geändert, um den Code unten es normal gearbeitet:

public class CoursePart : ContentPart<CourseRecord> 

{ 
    public String Area 
    { 
     get { return Record.Area; } 
     set { Record.Area = value; } 
    } 

    [Required] 
    public String Description 
    { 
     get { return Record.Description; } 
     set { Record.Description = value; } 
    } 

    [Required] 
    public String Title 
    { 
     get { return Record.Title; } 
     set { Record.Title = value; } 
    } 

    public String ImagePath 
    { 
     get { return Record.ImagePath; } 
     set { Record.ImagePath = value; } 
    } 
} 
Verwandte Themen