Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

Introdução


Em grande parte de nosso sistema, muitas telas precisam contém conter apenas uma lógica de CRUD básica (Create, Read, Update e Delete).

Visando uma maior produtividade, o TNF contém trás classes que agilizam essa criação de serviços de forma automática.

Para utilizar essas funcionalidades instale via nuget o pacote Tnf Tnf e Tnf.App.EntityFrameworkCore disponível em nosso package sourcehttps://www.myget.org/F/tnf/api/v3/index.json

Definindo um Serviço de CRUD

Primeiro vamos criar nossa interface para o serviço deaplicação definindo sua herança para a interface IAsyncCrudAppService<CountryDto> informando qual o Dto que será usado para o mapeamento da entidade:

Bloco de código
languagec#
firstline1
titleICountryAppService.cs
linenumberstrue
public interface ICountryAppService : IAsyncCrudAppService<CountryDto>
{
}

Adicionando Validações ao DTO

No exemplo acima criamos um serviço para trabalhar com o objeto CountryDto representando a entidade persistida com Entity Framework Core.

Bloco de código
languagec#
firstline1
titleCountryDto.cs
linenumberstrue
public class CountryDto : CustomValidate
{
    public string Name { get; set; }
    public override void AddValidationErrors(CustomValidationContext context)
    {
       if (string.IsNullOrWhiteSpace(Name))
       {
           context.Results.Add(new ValidationResult("Name is required"));
       }
   }
}

Acima temos a definição de nosso DTO usando a herança de uma classe chamada CustomValidate. Essa classe realiza a validação do objeto DTO ao criar o serviço automático. Nela podem ser adicionadas regras de validação personalizadas.

Criando a Entidade do Entity Framework Core

Para a tabela "Countries" temos a seguinte definição:

Bloco de código
languagec#
firstline1
titleCountry.cs
linenumberstrue
[AutoMap(typeof(CountryDto))]
[Table("Countries")]
public class Country : Entity
{
    public const int MaxNameLength = 256;
    [Required]
    [MaxLength(MaxNameLength)]
    public string Name { get; set; }

    public Country()
    {
    }

    public Country(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

...

Para utilizar o AutoMapper consulte o tópico de Mapeamento Automático de Entidades.

Implementando o Serviço de CRUD

Agora vamos implementar a nossa classe de serviço:

Bloco de código
languagec#
firstline1
titleCountryAppService.cs
linenumberstrue
public class CountryAppService : AsyncCrudAppService<Country, CountryDto>, ICountryAppService
{
    public CountryAppService(IRepository<Country> repository)
        : base(repository)
    {
    }
}

...

Após a definição acima o serviço de aplicação pode ser usado normalmente em sua aplicação.

A herança da classe AsyncCrudAppService< Entity, Dto> expõe o CRUD no formato assíncrono. Também existe a versão síncrona do serviço de CRUD usando a herança CrudAppService< Entity, Dto>