Orchard CMS - обработчик не обновляет базу данных - PullRequest
1 голос
/ 30 марта 2012

В моем модуле фруктового сада все работает нормально, но, к сожалению, база данных не обновляется.

Я определил представление для панели администратора на Orchard.Web \ Modules \ Course \ Views \ EditorTemplates\ Parts \ Course.cshtml как показано ниже:

@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>

И драйвер, как показано ниже:

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);
        }
    }

И обработчик:

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

    }
}

Класс миграции, описанный ниже, находится в файле 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;
        }
    }
}

Модели описаны ниже:

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; }
    }
}

Я выполнял шаги в соответствии с примером в документации для сада: http://docs.orchardproject.net/Documentation/Writing-a-content-part.

Проблема: База данных не создается или не обновляется, каждое свойство из записи обновляется с нулевыми значениями,метод repository.Table in CourseHandler всегда возвращает список.

С уважением, Тито

1 Ответ

1 голос
/ 31 марта 2012

Благодаря комментарию @mdm, который дал мне подсказку, я снова взглянул на мой код Код миграции.И класс CoursePart был определен неправильно, поскольку он не записывал и не читал из Записи.

Когда я изменил его на приведенный ниже код, он работал нормально:

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; }
    }
}
...