Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt

Use this file to discover all available pages before exploring further.

La base de datos de Tienda MiCholo se llama DB_TIENDA_MICHOLO y reside en una instancia SQL Server (por defecto (localdb)\MSSQLLocalDB en desarrollo). Su esquema es gestionado íntegramente por Entity Framework Core 10 a través de migraciones con código, lo que garantiza que la estructura de la base de datos siempre esté sincronizada con los modelos C# del proyecto.

AppDbContext

AppDbContext es el punto de entrada a la base de datos. Extiende IdentityDbContext<IdentityUser>, lo que significa que hereda automáticamente todas las tablas de ASP.NET Identity además de exponer las entidades de negocio propias de la tienda.
Data/AppDbContext.cs
public class AppDbContext : IdentityDbContext<IdentityUser>
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    public DbSet<Producto> Productos { get; set; }
    public DbSet<Proveedor> Proveedores { get; set; }
    public DbSet<Venta> Ventas { get; set; }
    public DbSet<DetalleVenta> DetallesVentas { get; set; }
}

Tablas del dominio

DbSetTabla SQL generadaDescripción
ProductosProductosCatálogo de artículos con precio, stock, categoría y fecha de vencimiento
ProveedoresProveedoresEmpresas suministradoras con RUC y teléfono
VentasVentasCabecera de cada transacción: cliente, fecha, tipo de comprobante y total
DetallesVentasDetallesVentasLíneas de detalle de cada venta: producto, cantidad y precio unitario

Tablas de Identity heredadas

Al extender IdentityDbContext<IdentityUser>, EF Core crea automáticamente el siguiente conjunto de tablas para gestionar usuarios, roles y tokens:
TablaDescripción
AspNetUsersCuentas de usuario (IdentityUser)
AspNetRolesRoles disponibles (Admin, Vendedor)
AspNetUserRolesRelación muchos-a-muchos entre usuarios y roles
AspNetUserClaimsClaims adicionales asociados a un usuario
AspNetUserLoginsProveedores de inicio de sesión externos
AspNetUserTokensTokens de seguridad (restablecimiento de contraseña, etc.)
AspNetRoleClaimsClaims asociados a un rol

Relaciones

Las relaciones entre entidades se configuran explícitamente en OnModelCreating usando la API fluent de EF Core, lo que permite controlar el comportamiento en cascada de forma precisa.

Producto → Proveedor (muchos a uno)

Cada producto pertenece a un único proveedor. La clave foránea Proveedor_ID en la tabla Productos apunta a IdProveedor en Proveedores.
Data/AppDbContext.cs
modelBuilder.Entity<Producto>()
    .HasOne(p => p.Proveedor)
    .WithMany(pr => pr.Productos)
    .HasForeignKey(p => p.Proveedor_ID)
    .OnDelete(DeleteBehavior.Restrict);
OnDelete: Restrict impide eliminar un proveedor mientras tenga productos asociados.

DetalleVenta → Producto (muchos a uno)

Cada línea de detalle referencia un producto. La clave foránea Producto_ID en DetallesVentas apunta a IdProducto en Productos.
Data/AppDbContext.cs
modelBuilder.Entity<DetalleVenta>()
    .HasOne(d => d.Producto)
    .WithMany(p => p.DetallesVentas)
    .HasForeignKey(d => d.Producto_ID)
    .OnDelete(DeleteBehavior.Restrict);
OnDelete: Restrict protege el historial de ventas: no se puede eliminar un producto si ya fue vendido.

DetalleVenta → Venta (muchos a uno)

Cada línea de detalle pertenece a una venta. La clave foránea Venta_ID en DetallesVentas apunta a IdVenta en Ventas.
Data/AppDbContext.cs
modelBuilder.Entity<DetalleVenta>()
    .HasOne(d => d.Venta)
    .WithMany(v => v.DetallesVentas)
    .HasForeignKey(d => d.Venta_ID)
    .OnDelete(DeleteBehavior.Cascade);
OnDelete: Cascade significa que al eliminar (o anular) una venta, sus líneas de detalle se eliminan automáticamente.

Conversiones de enumeraciones

EF Core almacena los dos enums del modelo Venta como cadenas de texto (nvarchar) en lugar de enteros. Esto mejora la legibilidad directa de los datos en SQL Server y evita ambigüedades si el orden de los valores cambia en el futuro.
Data/AppDbContext.cs
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Venta>()
        .Property(v => v.Estado)
        .HasConversion<string>();

    modelBuilder.Entity<Venta>()
        .Property(v => v.TipoComprobante)
        .HasConversion<string>();

    // ... relaciones ...

    base.OnModelCreating(modelBuilder);
}
PropiedadTipo C#Valores posiblesAlmacenado como
Venta.EstadoEstadoVentaActiva, Anulada"Activa" / "Anulada"
Venta.TipoComprobanteTipoComprobanteBOLETA, FACTURA"BOLETA" / "FACTURA"
HasConversion<string>() es equivalente a usar un ValueConverter explícito que llama a ToString() al guardar y a Enum.Parse() al leer. EF Core lo resuelve automáticamente en tiempo de compilación.

Migraciones

El historial de migraciones refleja la evolución incremental del esquema desde la creación inicial hasta las últimas incorporaciones de campos. Cada migración es un archivo C# con los métodos Up (aplicar cambio) y Down (revertir cambio).
#Nombre de la migraciónDescripción
120260702045431_MiCholo 1Esquema inicial: tablas Productos, Proveedores, Ventas, DetallesVentas
220260703214234_g1Ajustes intermedios al esquema de negocio
320260703223248_IdentityUpdateIncorporación de las tablas de ASP.NET Core Identity
420260703233508_AddVentaEstadoAgrega la columna Estado (enum EstadoVenta) a la tabla Ventas
520260704032717_AddFacturaFieldsToVentaAgrega los campos Ruc, Celular, TipoComprobante y ModificadoPor a Ventas
620260704051826_AddProductoActivoAgrega la columna Activo (bit) a la tabla Productos
720260704052618_UpdateProductosToActivoActualiza los productos existentes estableciendo Activo = 1 como valor predeterminado

Comandos de migración

Aplicar todas las migraciones pendientes a la base de datos:
dotnet ef database update
Crear una nueva migración después de modificar un modelo:
dotnet ef migrations add NombreMigracion
Revertir a una migración específica (por ejemplo, antes de agregar el campo Activo):
dotnet ef database update AddFacturaFieldsToVenta
Los comandos dotnet ef requieren que el paquete Microsoft.EntityFrameworkCore.Tools esté instalado en el proyecto y que te encuentres en el directorio raíz del proyecto (donde reside TiendaMiCholo.csproj).

Nombre de la base de datos

El nombre de la base de datos y la cadena de conexión se configuran en appsettings.json:
appsettings.json
{
  "ConnectionStrings": {
    "CadenaMiCholo": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=DB_TIENDA_MICHOLO;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}
ParámetroValor
Data Source(localdb)\MSSQLLocalDB (SQL Server LocalDB para desarrollo)
Initial CatalogDB_TIENDA_MICHOLO
Trusted_ConnectionTrue (autenticación Windows integrada)
TrustServerCertificateTrue (omite validación de certificado TLS en LocalDB)
En producción, reemplaza la cadena de conexión por una que apunte a un servidor SQL Server real y nunca incluyas credenciales directamente en appsettings.json. Usa variables de entorno, Azure Key Vault o los secretos de usuario de .NET (dotnet user-secrets) para gestionar información sensible.

Build docs developers (and LLMs) love