Используйте элементы управления UIOMaticField или backoffice в Ui-O-Matic Umbraco

Я новичок в Umbraco CMS. Я использую плагин Ui-O-Matic в своем проекте.
Ui-O-Matic позволяет легко работать с CRUD для базы данных. Но я хочу использовать элементы управления backoffice, такие как file, textarea и т. Д.

Поэтому я использую UIOMaticFielld, как это в файле database.cs.

 [Column("newsDetail")]
 [UIOMaticField("News Detail","Add Details",View ="textarea")]
 public string newsDetail { get; set; }

 [Column("newsImage")]
 [UIOMaticField("Image","Upload Image",View ="file")]
 public string newsImage { get; set; }

Проблема в том, что когда я делаю какие-либо изменения в базе данных, мне нужно обновить файл database.tt, чтобы получить изменения в базе данных. Но он воссоздает файл database.cs и мои предыдущие изменения:

[UIOMaticField("News Detail","Add Details",View ="textarea")]

удаляет из файла database.cs И каждый раз мне приходится делать одни и те же изменения.
Пожалуйста, подскажите, что мне делать, чтобы сохранить свои изменения, даже если я обновляю файл database.tt?
Другой лучший способ сделать операцию CRUD также предпочтительнее.

1 ответ

Решение

После долгих поисков я обнаружил, что, поскольку файл database.cs генерируется автоматически, я не должен вносить в него пользовательские изменения.
Я нашел другой способ использовать элементы управления backoffice. Позвольте мне объяснить здесь, может это поможет другим.

Вместо того, чтобы писать UIOMatoicField в файле databse.cs, создайте модель, чтобы сделать то же самое.
Внесите следующие изменения в файл "Models/Generated/database.tt"

// Settings 
    ConnectionStringName = "umbracoDbDSN";          // Uses last connection string in config if not specified
    Namespace = "Generator";
    RepoName = "";
    GeneratePocos = true;
    ClassPrefix = "";  
    ClassSuffix = "";  

    // Read schema 
    var tables = LoadTables();  
    tables["Course"].Ignore = true; // Prevents table to include in databse.cs file  
    tables["News"].Ignore = true; 
if (tables.Count>0)
    {
#>
<#@ include file="UIOMatic.Generator.ttinclude" #>
<# } #>

Затем создайте новую модель, как показано ниже. Например "Модель \NewsModel.cs"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using UIOMatic.Attributes;
using UIOMatic.Enums;
using UIOMatic.Interfaces;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseAnnotations;

namespace EdumentUIOMatic.Models
{
    [Umbraco.Core.Persistence.TableName("News")]
    [PrimaryKey("newsId")]
    [UIOMatic("News", "icon-box-open", "icon-box-open", RenderType = UIOMaticRenderType.List, ConnectionStringName = "umbracoDbDSN")]   
    public class NewsModel: IUIOMaticModel
    {
        [UIOMaticIgnoreField]
        [Column("newsId")]
        public int newsId { get; set; }

        [Column("newsTitle")]
        [UIOMaticField("News Title", "Add Title")]
        public string newsTitle { get; set; }

        [Column("newsDetail")]
        [UIOMaticField("News Detail", "Add Details", View = "textarea")]
        public string newsDetail { get; set; }

        [Column("newsImage")]
        [UIOMaticField("Image", "Upload Image", View = "file")]
        public string newsImage { get; set; }



        [Column("isDeleted")]
        [UIOMaticField("Hide News", "Check if you want to hide this news")]        
        public bool isDeleted { get; set; }



        [System.Web.Http.AcceptVerbs("GET", "POST")]
        public IEnumerable<Exception> Validate()
        {
            return new List<Exception>();
        }
    }
}

Теперь, если вы перезагрузите файл database.tt, чтобы получить обновленную базу данных, ваш код не будет удален.

Другие вопросы по тегам