jcadafalch / TaskManager

MIT License
0 stars 0 forks source link

Obtenir llistat de etiquetes asignades a una tasca #15

Closed jcadafalch closed 1 year ago

jcadafalch commented 1 year ago

Al obtenir el llistat d'etiquetes assignades a una tasca, en cas d'haber etiquetes retorna null.

S'hauria de transformar la següent consulta SQL a EntityFramework.

SELECT *
FROM [dbo].[Tareas] AS [T]
 LEFT JOIN [dbo].[EtiquetaTarea] AS [E] ON [E].[TareasId] = [T].[Id]
 ;
easis commented 1 year ago

EF hauria de retornar un llistat sense elements. Recorda que les coleccions (llistes, relacions one-to-many/many-to-many de les entitats) s'han d'inicialitzar:

Exemple:

class Entitat {
    public ICollecion<string> Strings { get; set; } = new List<string>();
}
easis commented 1 year ago

A més, millor si la propietat no té un setter. Et deixo un exemple d'entitat d'un projecte meu:


using Datos.Modelos.Identidad;
using Datos.Modelos.Presencia;
using Extensiones;
using System;
using System.Collections.Generic;

namespace Datos.Modelos.Organizacion
{
    /// <summary>
    /// Modelo que representa una empresa.
    /// </summary>
    public class Empresa : IAggregateRoot
    {

        /// <summary>
        /// Identificador de la empresa.
        /// </summary>
        public Guid Id { get; set; } = Guid.NewGuid();

        /// <summary>
        /// Nombre de la empresa.
        /// </summary>
        public string Nombre { get; set; }

        /// <summary>
        /// Número máximo de empleados que puede tener esta empresa.
        /// </summary>
        /// <remarks>El valor por defecto es <i>1</i>.</remarks>
        public int NumeroMaximoEmpleados { get; set; } = 1;

        /// <summary>
        /// Clave que usan las empresas para realizar operaciones a través de la API.
        /// </summary>
        public string Token { get; set; }

        #region Relaciones

        /// <summary>
        /// Incidencias disponibles para esta empresa.
        /// </summary>
        public ICollection<Incidencia> Incidencias { get; } = new List<Incidencia>();

        /// <summary>
        /// Usuarios que pertenecen a esta empresa.
        /// </summary>
        public ICollection<Usuario> Empleados { get; } = new List<Usuario>();

        #endregion // Relaciones

        #region Métodos

        public override string ToString() => this.Nombre;

        #endregion // Métodos

    }
}
jcadafalch commented 1 year ago

Solucionat inicialitzant les llistes i ignorant els cicles de JsonSerializerOptions.

public ICollection<Etiqueta> Etiquetas { get; } = new List<Etiqueta>();
public ICollection<Tarea> Tareas { get; } = new List<Tarea>();
builder.Services.AddControllersWithViews().AddJsonOptions(options => options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);