Skip to content

Entidade

Marcelo Vieira de Souza edited this page Sep 2, 2018 · 2 revisions

Sempre que for necessário representar um conceito, uma classe de valor, ou um objeto que será salvo no banco de dados, a arquitetura representa esse item como Entidade.

Todas as entidades devem herdar de FluentEntity ou superiores. Para que a arquitetura consiga tratar os dados de forma homogênea, faz-se necessário herdar sempre que possível de FluentEntity.

Vamos a um exemplo da entidade User.

Vaja a hierarquia:

User < FluentEntity < BaseEntity

A implementação fica como a seguir:

public class User: FluentEntity
{
    public int Id { get; set; }
    public string Login { get; set; }
    public string Name { get; set; }
}

Referência: Toda entidade que represente um objeto que será salvo no banco de dados deve ter um Id para que o orquestrador de dados da arquitetura consiga individualizar os dados de representação da entidade, portanto, uma propriedade do tipo que represente um identificador é obrigatória. Quando o Entity Framework estiver em uso, o Id deve ser Int, quando for RavenDB, o Id deve ser Guid. Caso o nome da propriedade não possa ser Id, deve-se usar um atributo para identifica-lo como chave da entidade.

public class User: FluentEntity
{
    [Key]
    public int PersonId { get; set; }
}

É possível também definir chave composta. Nesse caso, faz-se necessário informar a ordem das chaves. Veja um exemplo:

public class User : FluentEntity
{
   [Key, Column(Order = 0)]
   public int PersonId { get; set; }

   [Key, Column(Order = 1)]
   public int PersonType { get; set; }
}

Entidades que herdem de FluentEntity serão adicionadas no contexto da aplicação para operações com banco de dados.

O mapeamento para o banco de dados será feito de forma automática, portando, caso o nome da tabela ou coluna do banco de dados não seja igual ao nome da propriedade, faz-se necessário decorar a entidade com alguns atributos conforme exemplo abaixo:

using System;
using System.ComponentModel.DataAnnotations.Schema;
using Fluent.Architecture.Model;

namespace Fluent.Architecture.Sample.Service
{
    [Table("users")]
    public class User: FluentEntity
    {
	[Key] 
	public int PersonId { get; set;  }

        [Column("registration_date")]
        public virtual DateTime RegistrationDate { get; set; }
    }
}

Note que estamos usando

Table: pra definir o nome da tabela ou view.

Key: pra definir que é a chave primária da tabela.

Column: pra definir o nome da coluna no banco de dados referente a essa propriedade


Caso deseja criar entidades que não tenham interação com banco de dados, existem três formas de se fazer.

  1. Criando uma classe abstrata que herde de FluentEntity.
public abstract class Reports : FluentEntity
{
    public int DataCount { get; set; }
}
  1. Criando uma classe concreta que herde diretamente de BaseEntity. Veja a hierarquia:

User < BaseEntity

public class Reports : BaseEntity
{
    public int DataCount { get; set; }
}
  1. Fazendo uso do atributo NotDbEntity.
[NotDbEntity]
public class Reports : FluentEntity
{
    public int DataCount { get; set; }
}

Note que esse atributo não propaga para quem herde de Reports, Somente é válido para essa classe em específico.

Se deseja propagação, utilize o modelo de herança de BaseEntity.


Pra prosseguir, veja o item Especificação

Clone this wiki locally