Используйте элементы управления 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, чтобы получить обновленную базу данных, ваш код не будет удален.