Para mostrar el ejemplo de GraphQL vamos a crear nuestra tabla Caducidad, la cual contiene la fecha en que caducan los productos de cada cliente.
En nuestra carpeta models, agregamos el archivo Caducidad.cs
Para poder obtener los datos de los productos, al igual que en OData agregamos nuestro objeto Producto y Cliente como propiedades.
Caducidad.cs
public class Caducidad
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "Required")]
public int ProductoId { get; set; }
public Producto Producto { get; set; }
[Required(ErrorMessage = "Required")]
public int ClienteId { get; set; }
public Cliente Cliente { get; set; }
[Required(ErrorMessage = "Required")]
public int Cantidad { get; set; }
[Required(ErrorMessage = "Required")]
public DateTime Fecha { get; set; }
}
Agregamos nuestras llaves foráneas e índices en nuestra carpeta EntityConfigurations agregamos nuestro archivo CaducidadConfiguration.cs
CaducidadConfiguration.cs
public class CaducidadConfiguration : IEntityTypeConfiguration<Caducidad>
{
public void Configure(EntityTypeBuilder<Caducidad> builder)
{
builder.HasOne(c => c.Cliente)
.WithMany(cc => cc.Caducidades)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(e => e.Producto)
.WithMany(c => c.Caducidades)
.OnDelete(DeleteBehavior.Restrict);
builder.HasIndex(e => new { e.ClienteId, e.ProductoId, e.Fecha })
.HasName("UI_ClienteProducto")
.IsUnique();
}
}
Agregamos el modelo y la configuración a nuestro archivo CaducaContext.cs
CaducaContext.cs
public class CaducaContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//Otras configuraciones
modelBuilder.ApplyConfiguration(new CaducidadConfiguration());
}
public virtual DbSet<Caducidad> Caducidad { get; set; }