From 9f9729e6dc81ee2092fadec91d7f107cca242554 Mon Sep 17 00:00:00 2001 From: Lucas Medina Date: Wed, 1 Nov 2023 08:45:22 -0300 Subject: [PATCH 1/3] Created migrations --- DataAccess/DataAccess.csproj | 19 +++ DataAccess/EjercicioDbContext.cs | 21 +++ DataAccess/Entities.cs | 38 +++++ .../20231101114253_init.Designer.cs | 135 ++++++++++++++++++ DataAccess/Migrations/20231101114253_init.cs | 103 +++++++++++++ .../EjercicioDbContextModelSnapshot.cs | 132 +++++++++++++++++ DataAccess/Program.cs | 2 + SolutionEjercicio.sln | 22 +++ 8 files changed, 472 insertions(+) create mode 100644 DataAccess/DataAccess.csproj create mode 100644 DataAccess/EjercicioDbContext.cs create mode 100644 DataAccess/Entities.cs create mode 100644 DataAccess/Migrations/20231101114253_init.Designer.cs create mode 100644 DataAccess/Migrations/20231101114253_init.cs create mode 100644 DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs create mode 100644 DataAccess/Program.cs create mode 100644 SolutionEjercicio.sln diff --git a/DataAccess/DataAccess.csproj b/DataAccess/DataAccess.csproj new file mode 100644 index 0000000..4245e42 --- /dev/null +++ b/DataAccess/DataAccess.csproj @@ -0,0 +1,19 @@ + + + + Exe + net7.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/DataAccess/EjercicioDbContext.cs b/DataAccess/EjercicioDbContext.cs new file mode 100644 index 0000000..aa6879e --- /dev/null +++ b/DataAccess/EjercicioDbContext.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess +{ + public class EjercicioDbContext : DbContext + { + public DbSet Proyectos { get; set; } + public DbSet Usuarios { get; set; } + public DbSet CargasDeHoras { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer("Server= .\\SQLEXPRESS;Database=EjercicioDbContext;Integrated Security=True;Trusted_Connection=True;Encrypt=False;"); + } + } +} diff --git a/DataAccess/Entities.cs b/DataAccess/Entities.cs new file mode 100644 index 0000000..1f6a18f --- /dev/null +++ b/DataAccess/Entities.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess +{ + public class Proyecto + { + public int ProyectoId { get; set; } + public string Nombre { get; set; } + public List Usuarios { get; set; } + public List CargasDeHoras { get; set; } + } + + + public class Usuario + { + public int UsuarioId { get; set; } + public string Nombre { get; set; } + public int ProyectoId { get; set; } + public Proyecto Proyecto { get; set; } + } + + public class CargaHoras + { + public int CargaHorasId { get; set; } + public int HorasTrabajadas { get; set; } + public string Descripcion { get; set; } + public int UsuarioId { get; set; } + public Usuario Usuario { get; set; } + public int ProyectoId { get; set; } + public Proyecto Proyecto { get; set; } + } + + +} diff --git a/DataAccess/Migrations/20231101114253_init.Designer.cs b/DataAccess/Migrations/20231101114253_init.Designer.cs new file mode 100644 index 0000000..f9f3f09 --- /dev/null +++ b/DataAccess/Migrations/20231101114253_init.Designer.cs @@ -0,0 +1,135 @@ +// +using DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace DataAccess.Migrations +{ + [DbContext(typeof(EjercicioDbContext))] + [Migration("20231101114253_init")] + partial class init + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("DataAccess.CargaHoras", b => + { + b.Property("CargaHorasId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CargaHorasId")); + + b.Property("Descripcion") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HorasTrabajadas") + .HasColumnType("int"); + + b.Property("ProyectoId") + .HasColumnType("int"); + + b.Property("UsuarioId") + .HasColumnType("int"); + + b.HasKey("CargaHorasId"); + + b.HasIndex("ProyectoId"); + + b.HasIndex("UsuarioId"); + + b.ToTable("CargasDeHoras"); + }); + + modelBuilder.Entity("DataAccess.Proyecto", b => + { + b.Property("ProyectoId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ProyectoId")); + + b.Property("Nombre") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ProyectoId"); + + b.ToTable("Proyectos"); + }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.Property("UsuarioId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("UsuarioId")); + + b.Property("Nombre") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProyectoId") + .HasColumnType("int"); + + b.HasKey("UsuarioId"); + + b.HasIndex("ProyectoId"); + + b.ToTable("Usuarios"); + }); + + modelBuilder.Entity("DataAccess.CargaHoras", b => + { + b.HasOne("DataAccess.Proyecto", "Proyecto") + .WithMany("CargasDeHoras") + .HasForeignKey("ProyectoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DataAccess.Usuario", "Usuario") + .WithMany() + .HasForeignKey("UsuarioId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proyecto"); + + b.Navigation("Usuario"); + }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.HasOne("DataAccess.Proyecto", "Proyecto") + .WithMany("Usuarios") + .HasForeignKey("ProyectoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proyecto"); + }); + + modelBuilder.Entity("DataAccess.Proyecto", b => + { + b.Navigation("CargasDeHoras"); + + b.Navigation("Usuarios"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DataAccess/Migrations/20231101114253_init.cs b/DataAccess/Migrations/20231101114253_init.cs new file mode 100644 index 0000000..14be81f --- /dev/null +++ b/DataAccess/Migrations/20231101114253_init.cs @@ -0,0 +1,103 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DataAccess.Migrations +{ + /// + public partial class init : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Proyectos", + columns: table => new + { + ProyectoId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Nombre = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Proyectos", x => x.ProyectoId); + }); + + migrationBuilder.CreateTable( + name: "Usuarios", + columns: table => new + { + UsuarioId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Nombre = table.Column(type: "nvarchar(max)", nullable: false), + ProyectoId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Usuarios", x => x.UsuarioId); + table.ForeignKey( + name: "FK_Usuarios_Proyectos_ProyectoId", + column: x => x.ProyectoId, + principalTable: "Proyectos", + principalColumn: "ProyectoId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "CargasDeHoras", + columns: table => new + { + CargaHorasId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + HorasTrabajadas = table.Column(type: "int", nullable: false), + Descripcion = table.Column(type: "nvarchar(max)", nullable: false), + UsuarioId = table.Column(type: "int", nullable: false), + ProyectoId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CargasDeHoras", x => x.CargaHorasId); + table.ForeignKey( + name: "FK_CargasDeHoras_Proyectos_ProyectoId", + column: x => x.ProyectoId, + principalTable: "Proyectos", + principalColumn: "ProyectoId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_CargasDeHoras_Usuarios_UsuarioId", + column: x => x.UsuarioId, + principalTable: "Usuarios", + principalColumn: "UsuarioId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_CargasDeHoras_ProyectoId", + table: "CargasDeHoras", + column: "ProyectoId"); + + migrationBuilder.CreateIndex( + name: "IX_CargasDeHoras_UsuarioId", + table: "CargasDeHoras", + column: "UsuarioId"); + + migrationBuilder.CreateIndex( + name: "IX_Usuarios_ProyectoId", + table: "Usuarios", + column: "ProyectoId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "CargasDeHoras"); + + migrationBuilder.DropTable( + name: "Usuarios"); + + migrationBuilder.DropTable( + name: "Proyectos"); + } + } +} diff --git a/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs new file mode 100644 index 0000000..64db952 --- /dev/null +++ b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs @@ -0,0 +1,132 @@ +// +using DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace DataAccess.Migrations +{ + [DbContext(typeof(EjercicioDbContext))] + partial class EjercicioDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("DataAccess.CargaHoras", b => + { + b.Property("CargaHorasId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CargaHorasId")); + + b.Property("Descripcion") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HorasTrabajadas") + .HasColumnType("int"); + + b.Property("ProyectoId") + .HasColumnType("int"); + + b.Property("UsuarioId") + .HasColumnType("int"); + + b.HasKey("CargaHorasId"); + + b.HasIndex("ProyectoId"); + + b.HasIndex("UsuarioId"); + + b.ToTable("CargasDeHoras"); + }); + + modelBuilder.Entity("DataAccess.Proyecto", b => + { + b.Property("ProyectoId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ProyectoId")); + + b.Property("Nombre") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("ProyectoId"); + + b.ToTable("Proyectos"); + }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.Property("UsuarioId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("UsuarioId")); + + b.Property("Nombre") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProyectoId") + .HasColumnType("int"); + + b.HasKey("UsuarioId"); + + b.HasIndex("ProyectoId"); + + b.ToTable("Usuarios"); + }); + + modelBuilder.Entity("DataAccess.CargaHoras", b => + { + b.HasOne("DataAccess.Proyecto", "Proyecto") + .WithMany("CargasDeHoras") + .HasForeignKey("ProyectoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DataAccess.Usuario", "Usuario") + .WithMany() + .HasForeignKey("UsuarioId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proyecto"); + + b.Navigation("Usuario"); + }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.HasOne("DataAccess.Proyecto", "Proyecto") + .WithMany("Usuarios") + .HasForeignKey("ProyectoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proyecto"); + }); + + modelBuilder.Entity("DataAccess.Proyecto", b => + { + b.Navigation("CargasDeHoras"); + + b.Navigation("Usuarios"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DataAccess/Program.cs b/DataAccess/Program.cs new file mode 100644 index 0000000..3751555 --- /dev/null +++ b/DataAccess/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/SolutionEjercicio.sln b/SolutionEjercicio.sln new file mode 100644 index 0000000..e327bf0 --- /dev/null +++ b/SolutionEjercicio.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataAccess", "DataAccess\DataAccess.csproj", "{5D193F93-02A8-413A-A88D-A0BD309677AD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5D193F93-02A8-413A-A88D-A0BD309677AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D193F93-02A8-413A-A88D-A0BD309677AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D193F93-02A8-413A-A88D-A0BD309677AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D193F93-02A8-413A-A88D-A0BD309677AD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From da1b80a245eae833dc6c8a0a950dd79ad17d129c Mon Sep 17 00:00:00 2001 From: Lucas Medina Date: Wed, 1 Nov 2023 09:31:54 -0300 Subject: [PATCH 2/3] Final commit --- DataAccess/EjercicioDbContext.cs | 18 +++++++++- ...ner.cs => 20231101122556_init.Designer.cs} | 6 ++-- ...1114253_init.cs => 20231101122556_init.cs} | 4 +-- .../EjercicioDbContextModelSnapshot.cs | 4 +-- DataAccess/Program.cs | 35 +++++++++++++++++++ 5 files changed, 59 insertions(+), 8 deletions(-) rename DataAccess/Migrations/{20231101114253_init.Designer.cs => 20231101122556_init.Designer.cs} (96%) rename DataAccess/Migrations/{20231101114253_init.cs => 20231101122556_init.cs} (96%) diff --git a/DataAccess/EjercicioDbContext.cs b/DataAccess/EjercicioDbContext.cs index aa6879e..ce15c0d 100644 --- a/DataAccess/EjercicioDbContext.cs +++ b/DataAccess/EjercicioDbContext.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; @@ -15,7 +16,22 @@ public class EjercicioDbContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer("Server= .\\SQLEXPRESS;Database=EjercicioDbContext;Integrated Security=True;Trusted_Connection=True;Encrypt=False;"); + optionsBuilder.UseSqlServer("Server= .\\SQLEXPRESS;Database=Prueba2;Integrated Security=True;Trusted_Connection=True;Encrypt=False;"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .Entity() + .HasOne(e => e.Proyecto) + .WithMany(e => e.CargasDeHoras) + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder + .Entity() + .HasOne(e => e.Proyecto) + .WithMany(e => e.Usuarios) + .OnDelete(DeleteBehavior.Restrict); } } } diff --git a/DataAccess/Migrations/20231101114253_init.Designer.cs b/DataAccess/Migrations/20231101122556_init.Designer.cs similarity index 96% rename from DataAccess/Migrations/20231101114253_init.Designer.cs rename to DataAccess/Migrations/20231101122556_init.Designer.cs index f9f3f09..aa824b5 100644 --- a/DataAccess/Migrations/20231101114253_init.Designer.cs +++ b/DataAccess/Migrations/20231101122556_init.Designer.cs @@ -11,7 +11,7 @@ namespace DataAccess.Migrations { [DbContext(typeof(EjercicioDbContext))] - [Migration("20231101114253_init")] + [Migration("20231101122556_init")] partial class init { /// @@ -98,7 +98,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("CargasDeHoras") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("DataAccess.Usuario", "Usuario") @@ -117,7 +117,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("Usuarios") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Proyecto"); diff --git a/DataAccess/Migrations/20231101114253_init.cs b/DataAccess/Migrations/20231101122556_init.cs similarity index 96% rename from DataAccess/Migrations/20231101114253_init.cs rename to DataAccess/Migrations/20231101122556_init.cs index 14be81f..db1efd9 100644 --- a/DataAccess/Migrations/20231101114253_init.cs +++ b/DataAccess/Migrations/20231101122556_init.cs @@ -40,7 +40,7 @@ protected override void Up(MigrationBuilder migrationBuilder) column: x => x.ProyectoId, principalTable: "Proyectos", principalColumn: "ProyectoId", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( @@ -62,7 +62,7 @@ protected override void Up(MigrationBuilder migrationBuilder) column: x => x.ProyectoId, principalTable: "Proyectos", principalColumn: "ProyectoId", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_CargasDeHoras_Usuarios_UsuarioId", column: x => x.UsuarioId, diff --git a/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs index 64db952..8a79538 100644 --- a/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs +++ b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs @@ -95,7 +95,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("CargasDeHoras") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("DataAccess.Usuario", "Usuario") @@ -114,7 +114,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("Usuarios") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Proyecto"); diff --git a/DataAccess/Program.cs b/DataAccess/Program.cs index 3751555..d177031 100644 --- a/DataAccess/Program.cs +++ b/DataAccess/Program.cs @@ -1,2 +1,37 @@ // See https://aka.ms/new-console-template for more information +using DataAccess; + Console.WriteLine("Hello, World!"); + +using (var context = new EjercicioDbContext()) +{ + + var proyecto1 = new Proyecto { Nombre = "Proyecto 1" }; + var proyecto2 = new Proyecto { Nombre = "Proyecto 2" }; + + context.Proyectos.AddRange(proyecto1, proyecto2); + context.SaveChanges(); + + + var usuario1 = new Usuario { Nombre = "Usuario 1", Proyecto = proyecto1 }; + var usuario2 = new Usuario { Nombre = "Usuario 2", Proyecto = proyecto2 }; + + context.Usuarios.AddRange(usuario1, usuario2); + context.SaveChanges(); + + + var cargaHorasUsuario1Proyecto1 = new CargaHoras { HorasTrabajadas = 4, Descripcion = "Tareas A", Usuario = usuario1, Proyecto = proyecto1 }; + var cargaHorasUsuario1Proyecto2 = new CargaHoras { HorasTrabajadas = 5, Descripcion = "Tareas B", Usuario = usuario1, Proyecto = proyecto2 }; + + var cargaHorasUsuario2Proyecto1 = new CargaHoras { HorasTrabajadas = 3, Descripcion = "Tareas C", Usuario = usuario2, Proyecto = proyecto1 }; + var cargaHorasUsuario2Proyecto2 = new CargaHoras { HorasTrabajadas = 6, Descripcion = "Tareas D", Usuario = usuario2, Proyecto = proyecto2 }; + + context.CargasDeHoras.AddRange( + cargaHorasUsuario1Proyecto1, + cargaHorasUsuario1Proyecto2, + cargaHorasUsuario2Proyecto1, + cargaHorasUsuario2Proyecto2 + ); + + context.SaveChanges(); +} \ No newline at end of file From a5b04415ed318ad3be9a50815aa31f4b40bb4632 Mon Sep 17 00:00:00 2001 From: Lucas Medina Date: Wed, 1 Nov 2023 10:10:58 -0300 Subject: [PATCH 3/3] Final commit ejercicio --- DataAccess/EjercicioDbContext.cs | 28 +++++----- DataAccess/Entities.cs | 51 +++++++++---------- ...ner.cs => 20231101130338_init.Designer.cs} | 17 ++++--- ...1122556_init.cs => 20231101130338_init.cs} | 6 +-- .../EjercicioDbContextModelSnapshot.cs | 15 +++--- DataAccess/Program.cs | 26 +++++----- 6 files changed, 73 insertions(+), 70 deletions(-) rename DataAccess/Migrations/{20231101122556_init.Designer.cs => 20231101130338_init.Designer.cs} (94%) rename DataAccess/Migrations/{20231101122556_init.cs => 20231101130338_init.cs} (96%) diff --git a/DataAccess/EjercicioDbContext.cs b/DataAccess/EjercicioDbContext.cs index ce15c0d..8daa958 100644 --- a/DataAccess/EjercicioDbContext.cs +++ b/DataAccess/EjercicioDbContext.cs @@ -16,22 +16,22 @@ public class EjercicioDbContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer("Server= .\\SQLEXPRESS;Database=Prueba2;Integrated Security=True;Trusted_Connection=True;Encrypt=False;"); + optionsBuilder.UseSqlServer("Server= .\\SQLEXPRESS;Database=PruebaFinal;Integrated Security=True;Trusted_Connection=True;Encrypt=False;"); } - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .Entity() - .HasOne(e => e.Proyecto) - .WithMany(e => e.CargasDeHoras) - .OnDelete(DeleteBehavior.Restrict); + //protected override void OnModelCreating(ModelBuilder modelBuilder) + //{ + // modelBuilder + // .Entity() + // .HasOne(e => e.Proyecto) + // .WithMany(e => e.CargasDeHoras) + // .OnDelete(DeleteBehavior.Restrict); - modelBuilder - .Entity() - .HasOne(e => e.Proyecto) - .WithMany(e => e.Usuarios) - .OnDelete(DeleteBehavior.Restrict); - } + // modelBuilder + // .Entity() + // .HasOne(e => e.Proyecto) + // .WithMany(e => e.Usuarios) + // .OnDelete(DeleteBehavior.Restrict); + //} } } diff --git a/DataAccess/Entities.cs b/DataAccess/Entities.cs index 1f6a18f..bcf93a5 100644 --- a/DataAccess/Entities.cs +++ b/DataAccess/Entities.cs @@ -6,33 +6,32 @@ namespace DataAccess { - public class Proyecto - { - public int ProyectoId { get; set; } - public string Nombre { get; set; } - public List Usuarios { get; set; } - public List CargasDeHoras { get; set; } - } + public class Proyecto + { + public int ProyectoId { get; set; } + public string Nombre { get; set; } + public List Usuarios { get; set; } + } - - public class Usuario - { - public int UsuarioId { get; set; } - public string Nombre { get; set; } - public int ProyectoId { get; set; } - public Proyecto Proyecto { get; set; } - } + public class Usuario + { + public int UsuarioId { get; set; } + public string Nombre { get; set; } + public int ProyectoId { get; set; } + public Proyecto Proyecto { get; set; } + public List CargasDeHoras { get; set; } + } + + public class CargaHoras + { + public int CargaHorasId { get; set; } + public int HorasTrabajadas { get; set; } + public string Descripcion { get; set; } + public int UsuarioId { get; set; } + public Usuario Usuario { get; set; } + public int ProyectoId { get; set; } + public Proyecto Proyecto { get; set; } + } - public class CargaHoras - { - public int CargaHorasId { get; set; } - public int HorasTrabajadas { get; set; } - public string Descripcion { get; set; } - public int UsuarioId { get; set; } - public Usuario Usuario { get; set; } - public int ProyectoId { get; set; } - public Proyecto Proyecto { get; set; } - } - } diff --git a/DataAccess/Migrations/20231101122556_init.Designer.cs b/DataAccess/Migrations/20231101130338_init.Designer.cs similarity index 94% rename from DataAccess/Migrations/20231101122556_init.Designer.cs rename to DataAccess/Migrations/20231101130338_init.Designer.cs index aa824b5..a41ef61 100644 --- a/DataAccess/Migrations/20231101122556_init.Designer.cs +++ b/DataAccess/Migrations/20231101130338_init.Designer.cs @@ -11,7 +11,7 @@ namespace DataAccess.Migrations { [DbContext(typeof(EjercicioDbContext))] - [Migration("20231101122556_init")] + [Migration("20231101130338_init")] partial class init { /// @@ -96,13 +96,13 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("DataAccess.CargaHoras", b => { b.HasOne("DataAccess.Proyecto", "Proyecto") - .WithMany("CargasDeHoras") + .WithMany() .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Restrict) + .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("DataAccess.Usuario", "Usuario") - .WithMany() + .WithMany("CargasDeHoras") .HasForeignKey("UsuarioId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -117,7 +117,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("Usuarios") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Restrict) + .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Proyecto"); @@ -125,10 +125,13 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("DataAccess.Proyecto", b => { - b.Navigation("CargasDeHoras"); - b.Navigation("Usuarios"); }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.Navigation("CargasDeHoras"); + }); #pragma warning restore 612, 618 } } diff --git a/DataAccess/Migrations/20231101122556_init.cs b/DataAccess/Migrations/20231101130338_init.cs similarity index 96% rename from DataAccess/Migrations/20231101122556_init.cs rename to DataAccess/Migrations/20231101130338_init.cs index db1efd9..13e7acc 100644 --- a/DataAccess/Migrations/20231101122556_init.cs +++ b/DataAccess/Migrations/20231101130338_init.cs @@ -40,7 +40,7 @@ protected override void Up(MigrationBuilder migrationBuilder) column: x => x.ProyectoId, principalTable: "Proyectos", principalColumn: "ProyectoId", - onDelete: ReferentialAction.Restrict); + onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( @@ -62,13 +62,13 @@ protected override void Up(MigrationBuilder migrationBuilder) column: x => x.ProyectoId, principalTable: "Proyectos", principalColumn: "ProyectoId", - onDelete: ReferentialAction.Restrict); + onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_CargasDeHoras_Usuarios_UsuarioId", column: x => x.UsuarioId, principalTable: "Usuarios", principalColumn: "UsuarioId", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.NoAction); }); migrationBuilder.CreateIndex( diff --git a/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs index 8a79538..2cd9b9f 100644 --- a/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs +++ b/DataAccess/Migrations/EjercicioDbContextModelSnapshot.cs @@ -93,13 +93,13 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("DataAccess.CargaHoras", b => { b.HasOne("DataAccess.Proyecto", "Proyecto") - .WithMany("CargasDeHoras") + .WithMany() .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Restrict) + .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("DataAccess.Usuario", "Usuario") - .WithMany() + .WithMany("CargasDeHoras") .HasForeignKey("UsuarioId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -114,7 +114,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasOne("DataAccess.Proyecto", "Proyecto") .WithMany("Usuarios") .HasForeignKey("ProyectoId") - .OnDelete(DeleteBehavior.Restrict) + .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Proyecto"); @@ -122,10 +122,13 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("DataAccess.Proyecto", b => { - b.Navigation("CargasDeHoras"); - b.Navigation("Usuarios"); }); + + modelBuilder.Entity("DataAccess.Usuario", b => + { + b.Navigation("CargasDeHoras"); + }); #pragma warning restore 612, 618 } } diff --git a/DataAccess/Program.cs b/DataAccess/Program.cs index d177031..dcec55b 100644 --- a/DataAccess/Program.cs +++ b/DataAccess/Program.cs @@ -5,32 +5,30 @@ using (var context = new EjercicioDbContext()) { - - var proyecto1 = new Proyecto { Nombre = "Proyecto 1" }; - var proyecto2 = new Proyecto { Nombre = "Proyecto 2" }; + + + var proyecto1 = new Proyecto { Nombre = "Proyecto A" }; + var proyecto2 = new Proyecto { Nombre = "Proyecto B" }; context.Proyectos.AddRange(proyecto1, proyecto2); context.SaveChanges(); - var usuario1 = new Usuario { Nombre = "Usuario 1", Proyecto = proyecto1 }; var usuario2 = new Usuario { Nombre = "Usuario 2", Proyecto = proyecto2 }; context.Usuarios.AddRange(usuario1, usuario2); context.SaveChanges(); - - var cargaHorasUsuario1Proyecto1 = new CargaHoras { HorasTrabajadas = 4, Descripcion = "Tareas A", Usuario = usuario1, Proyecto = proyecto1 }; - var cargaHorasUsuario1Proyecto2 = new CargaHoras { HorasTrabajadas = 5, Descripcion = "Tareas B", Usuario = usuario1, Proyecto = proyecto2 }; - - var cargaHorasUsuario2Proyecto1 = new CargaHoras { HorasTrabajadas = 3, Descripcion = "Tareas C", Usuario = usuario2, Proyecto = proyecto1 }; - var cargaHorasUsuario2Proyecto2 = new CargaHoras { HorasTrabajadas = 6, Descripcion = "Tareas D", Usuario = usuario2, Proyecto = proyecto2 }; + var cargaHorasUsuario1Proyecto1_1 = new CargaHoras { HorasTrabajadas = 4, Descripcion = "Tareas A", Usuario = usuario1, Proyecto = proyecto1 }; + var cargaHorasUsuario1Proyecto1_2 = new CargaHoras { HorasTrabajadas = 3, Descripcion = "Tareas B", Usuario = usuario1, Proyecto = proyecto1 }; + var cargaHorasUsuario2Proyecto2_1 = new CargaHoras { HorasTrabajadas = 5, Descripcion = "Tareas C", Usuario = usuario2, Proyecto = proyecto2 }; + var cargaHorasUsuario2Proyecto2_2 = new CargaHoras { HorasTrabajadas = 6, Descripcion = "Tareas D", Usuario = usuario2, Proyecto = proyecto2 }; context.CargasDeHoras.AddRange( - cargaHorasUsuario1Proyecto1, - cargaHorasUsuario1Proyecto2, - cargaHorasUsuario2Proyecto1, - cargaHorasUsuario2Proyecto2 + cargaHorasUsuario1Proyecto1_1, + cargaHorasUsuario1Proyecto1_2, + cargaHorasUsuario2Proyecto2_1, + cargaHorasUsuario2Proyecto2_2 ); context.SaveChanges();