No relalacionamento servico - contrato de 1 para 1.
É exibido no json somente o servicoId.
como eu faço para exibir todos os dados do contrato no json ?
contrato : [ dado1 : dado2 : ]
Isso eu não consegui fazer ?
No relalacionamento servico - contrato de 1 para 1.
É exibido no json somente o servicoId.
como eu faço para exibir todos os dados do contrato no json ?
contrato : [ dado1 : dado2 : ]
Isso eu não consegui fazer ?
Ola Jose!
Para exibir todos os dados do contrato no JSON junto com o serviço, você precisa incluir o relacionamento na consulta usando o .Include()
do Entity Framework.
Exemplo simples:
var servico = _context.Servicos
.Include(s => s.Contrato)
.FirstOrDefault(s => s.Id == id);
Isso vai carregar o contrato junto com o serviço. Aí, quando você retornar isso na API (com o return Ok(servico);
), o JSON já vai incluir os dados do contrato.
Se ainda não aparecer, veja se o relacionamento está bem mapeado na sua model:
public class Servico
{
public int Id { get; set; }
public Contrato Contrato { get; set; }
}
public class Contrato
{
public int Id { get; set; }
public int ServicoId { get; set; }
public Servico Servico { get; set; }
}
E no OnModelCreating
:
modelBuilder.Entity<Servico>()
.HasOne(s => s.Contrato)
.WithOne(c => c.Servico)
.HasForeignKey<Contrato>(c => c.ServicoId);
Se isso estiver certo, vai funcionar. Abs;
Com esse cenário, pode validar esse comando : FirstOrDefault(s => s.Id == id);
Esse último id não sei de onde vem ?
public static void AddEndPointServico(this WebApplication app) { app.MapGet("/servicos", async ([FromServices] ServicoConverter converter, [FromServices] FreelandoContext contexto) => { var servico = converter.EntityListToResponseList(contexto.Servicos. Include(s => s.Contrato) .AsNoTracking().ToList()); var entries = contexto.ChangeTracker.Entries(); return Results.Ok(await Task.FromResult(servico)); }).WithTags("Servicos").WithOpenApi(); }
public class Contrato { public Contrato() { }
public Contrato(Guid id, double valor, Vigencia vigencia, Servico servico, Profissional profissional)
{
Id = id;
Valor = valor;
Vigencia = vigencia;
Servico = servico;
Profissional = profissional;
}
public Guid Id { get; set; }
public double Valor { get; set; }
public Vigencia? Vigencia { get; set; }
public Guid ServicoId { get; set; }
public Servico Servico { get; set; }
public Guid ProfissionalId { get; set;}
public Profissional Profissional { get; set; }
}
namespace Freelando.Modelo; public class Servico { public Servico() { }
public Servico(Guid id, string? titulo, string? descricao, StatusServico status,
Contrato contrato, ICollection<Candidatura> candidaturas)
{
Id = id;
Titulo = titulo;
Descricao = descricao;
Status = status;
Contrato = contrato;
Candidaturas = candidaturas;
}
public Guid Id { get; set; }
public string? Titulo { get; set; }
public string? Descricao { get; set; }
public StatusServico Status { get; set; }
public Contrato Contrato { get; set; }
public ICollection<Candidatura> Candidaturas { get; } = [];
}
internal class ContratoTypeConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder entity) { entity.ToTable("TB_Contratos"); entity.Property(e => e.Id).HasColumnName("Id_Contrato"); entity.Property(e => e.ServicoId).HasColumnName("Id_Servico"); entity.Property(e => e.ProfissionalId).HasColumnName("ID_Profissional"); entity.OwnsOne(e => e.Vigencia, vigencia => { vigencia.Property(v => v.DataInicio).HasColumnName("Data_Inicio"); vigencia.Property(v => v.DataEncerramento).HasColumnName("Data_Encerramento"); });
entity.HasOne(e => e.Servico)
.WithOne(e => e.Contrato)
.HasForeignKey<Contrato>(e => e.Id);
entity.HasOne(e => e.Profissional)
.WithMany(e => e.Contratos)
.HasForeignKey(e =>e.ProfissionalId);
}
}
using Freelando.Modelo;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace Freelando.Dados.Mapeamentos; internal class ServicoTypeConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder entity) { entity.ToTable("TB_Servicos");
entity.Property(e => e.Id).HasColumnName("ID_Servico");
entity.Property(e => e.Descricao).HasColumnName("DS_Projeto");
entity
.Property(e => e.Status)
.HasConversion(
fromObj => fromObj.ToString(),
fromDb => (StatusServico)Enum.Parse(typeof(StatusServico), fromDb)
);
entity.HasOne(e => e.Contrato)
.WithOne(e => e.Servico)
.HasForeignKey<Contrato>(e => e.ServicoId);
}
}