Как автоматически добавлять аннотации данных в сгенерированные объекты? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть куча классов сущностей, сгенерированных автоматически из соединения с базой данных.Я хотел бы добавить аннотации данных автоматически, например, если столбец имеет тип varchar (100), тогда я хотел бы иметь аннотацию данных [StringLength(100)] или, если это не пустое поле, я хотел быиметь аннотацию [Required].Возможно ли это?

Единственный вопрос, который я нашел по этому поводу , это почти 10 лет , и ответ на данный момент больше не работает.

Заранее спасибо за любыепомощь.

1 Ответ

0 голосов
/ 30 мая 2019

После еще нескольких исследований и проб и ошибок мне удалось это сделать.По сути, это включает в себя редактирование шаблона T4, созданного Entity Framework.

После добавления ADO.NET Entity Data Model> EF Designer from data... вы получите файл EDMX, и если вы развернете его в Visual Studio, появится файл .tt сто же имя, что и файл .edmx.

В этом файле я добавил под <#=codeStringGenerator.UsingDirectives(inHeader: false)#> оператор using для аннотаций данных:

using System.ComponentModel.DataAnnotations;

Затем, несколькими строками ниже, после объявления simpleProperties, вforeach Я добавил следующее:

foreach (var edmProperty in simpleProperties) // <-- Original foreach statement
        {
            if(edmProperty.Nullable == false)
            {
            #>    [Required]
<#
            }
            if(edmProperty.MaxLength != null)
            {
            #>    [StringLength(<#=edmProperty.MaxLength#>)]
<#
            }
//Rest of the auto-generated code...

Сохранение этого файла обновит автоматически сгенерированные файлы .cs соответственно:

namespace MyNamespace
{
    using System;
    using System.Collections.Generic;

    using System.ComponentModel.DataAnnotations;

    public partial class MyModel
    {
        [Required]
        public int Id { get; set; }
        [Required]
        [StringLength(20)]
        public string MyField { get; set; }
    }
}
...