INTRODUÇÃO · CORE-DATAeQuantic.Core.DataO eQuantic.Core.Data estende a biblioteca principal com as abstrações de que o acesso a dados precisa: uma unidade de trabalho, repositórios e a correspondência entre uma linha guardada e uma entidade de domínio.
Visão geral
Implementa a unidade de trabalho, o padrão Repository e o mapeamento objeto-relacional como um conjunto, para que uma transação abranja vários repositórios e ainda assim confirme uma só vez.Funciona com vários fornecedores de base de dados e estratégias de persistência, e a escolha do fornecedor fica na configuração em vez do código que consulta.
Instalar
shell
dotnet add package eQuantic.Core.Data
O que faz
Unidade de trabalhoUma transação sobre vários repositórios, confirmada uma só vez, para que uma alteração a meio não sobreviva a um erro.
Repositórios ampliadosRepositórios genéricos com especificações, ordenação, paginação e projeções: a forma da consulta chega como argumento.
Mapeamento de entidadesCorrespondência entre entidades de domínio e DTOs, configurada em vez de presumida.
Auditoria automáticaA criação, a alteração e a exclusão são registradas automaticamente, em cada entidade que o pede.
Multi-tenantDados isolados por tenant, com o filtro aplicado automaticamente em vez de recordado em cada chamada.
Unidade de trabalhoUma transação sobre vários repositórios, confirmada uma só vez, para que uma alteração a meio não sobreviva a um erro.
Repositórios ampliadosRepositórios genéricos com especificações, ordenação, paginação e projeções: a forma da consulta chega como argumento.
Mapeamento de entidadesCorrespondência entre entidades de domínio e DTOs, configurada em vez de presumida.
Auditoria automáticaA criação, a alteração e a exclusão são registradas automaticamente, em cada entidade que o pede.
Multi-tenantDados isolados por tenant, com o filtro aplicado automaticamente em vez de recordado em cada chamada.
Início rápido
Configurar o contexto — O seu contexto de dados herda da classe base, que traz consigo a auditoria e os filtros de tenant.
C#
public class ApplicationDbContext : EQuanticDbContext{ public DbSet<Product> Products { get; set; } public DbSet<Order> Orders { get; set; } public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly); }}
Coordenar com uma unidade de trabalho — Receba a interface, use vários repositórios e guarde uma só vez.
C#
public class OrderService{ private readonly IUnitOfWork _unitOfWork; public OrderService(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } public async Task<Order> CreateOrderAsync(CreateOrderRequest request) { var order = new Order(request.CustomerId, request.Items); await _unitOfWork.GetRepository<Order>().AddAsync(order); await _unitOfWork.GetRepository<Product>().UpdateStockAsync(request.Items); await _unitOfWork.SaveChangesAsync(); return order; }}
Consultar com especificações — Construa a consulta como um objeto: combinável, testável e reutilizável na chamada seguinte.
C#
public class GetOrdersByCustomerSpec : Specification<Order>{ public GetOrdersByCustomerSpec(int customerId, DateTime? fromDate = null) { Criteria = o => o.CustomerId == customerId; if (fromDate.HasValue) Criteria = Criteria.And(o => o.CreatedAt >= fromDate.Value); AddInclude(o => o.Items); AddInclude("Items.Product"); ApplyOrderByDescending(o => o.CreatedAt); }}
Superfície pública
NAMESPACE
SUPERFÍCIE PÚBLICA
IUnitOfWork
Coordena as transações e os repositórios que nelas participam.
EQuanticDbContext
O contexto base do Entity Framework, com a auditoria e o filtro de tenant já montados.
Specification<T>
A classe base de uma especificação de consulta combinável.
Prefere ler código?
Todos os pacotes são MIT e públicos, e os exemplos são para copiar e colar.