Entity Framework Core 2:división de tablas

Entity Framework Core 2:división de tablas

Entity Framework Núcleo 2 fue lanzado el 14 de agosto. Trajo nuevas funciones.

En este artículo explicaré uno de ellos:División de tablas

El tallado de tablas parece tipos propios, pero no es lo mismo.
Pero una tabla SQL se puede proyectar en varias entidades (y no en una clase simple como los tipos poseídos).
Cada entidad debe tener el mismo clave principal, y cada entidad debe configurarse y configurarse por separado.

Ejemplo:

Proyectaremos esta tabla en 2 entidades, Producto y Detalles del producto:

public class Product
{
   public int ProductID { get; set; }
   public string Name { get; set; }
   public decimal Cost { get; set; }

   public ProductDetail Details { get; set; }
}

public class ProductDetail
{
   public int ProductID { get; set; }
   public decimal ListPrice { get; set; }
   public string Size { get; set; }
   public decimal? Weight { get; set; }

   public Product Product { get; set; }
}

Entonces configuremos estas 2 entidades

  • Una propiedad de navegación de Product a ProductDetails
  • Una propiedad de navegación de ProductDetails a Product

Se configurará como una relación uno a uno:

public class ProductConfiguration : IEntityTypeConfiguration<Product>
{
   public void Configure(EntityTypeBuilder<Product> builder)
   {
      builder.HasKey(x => x.ProductID);
      builder.HasOne(e => e.Details).WithOne( o=> o.Product).HasForeignKey<ProductDetail>(e => e.ProductID);
      builder.ToTable("Product");
   }
}
public class ProductDetailConfiguration : IEntityTypeConfiguration<ProductDetail>
{
   public void Configure(EntityTypeBuilder<ProductDetail> builder)
   {
      builder.HasKey(x=> x.ProductID);
      builder.HasOne(e => e.Product).WithOne(o => o.Details).HasForeignKey<Product>(e => e.ProductID);
      builder.ToTable("Product");
   }
}

Es idéntico a dos tablas sql vinculadas por una relación de uno a uno.

Si desea obtener detalles del producto cuando consulta un producto, debe agregar el método de extensión .Include ("Detalles del producto") a la consulta, como dos tablas sql vinculadas por una relación uno a uno también.

Ejemplo:

public List<Product> GetProductsWithDetails()
{
   var query = _context.Products.Include(p=> p.Details).ToList();
}

Esta característica se usaría comúnmente para obtener datos de la base de datos que solo desea consultar, evita que los desarrolladores creen múltiples versiones de una misma entidad, cada una utilizada según los datos que desea, especialmente por razones de rendimiento.

Entonces, ¿es una gran característica? ¡Me encanta! 🙂