From 8b04752d0e0b0988086f79f5fa2c1c9eec07caa9 Mon Sep 17 00:00:00 2001 From: sanchezvem Date: Fri, 17 Oct 2025 08:50:51 +0200 Subject: [PATCH] Migration --- BlogPlatform/BlogPlatformDbContext.cs | 13 ++ .../20251017065027_InitDatabase.Designer.cs | 166 ++++++++++++++++++ .../Migrations/20251017065027_InitDatabase.cs | 111 ++++++++++++ .../BlogPlatformDbContextModelSnapshot.cs | 163 +++++++++++++++++ 4 files changed, 453 insertions(+) create mode 100644 BlogPlatform/Migrations/20251017065027_InitDatabase.Designer.cs create mode 100644 BlogPlatform/Migrations/20251017065027_InitDatabase.cs create mode 100644 BlogPlatform/Migrations/BlogPlatformDbContextModelSnapshot.cs diff --git a/BlogPlatform/BlogPlatformDbContext.cs b/BlogPlatform/BlogPlatformDbContext.cs index 304a74f..ac5908b 100644 --- a/BlogPlatform/BlogPlatformDbContext.cs +++ b/BlogPlatform/BlogPlatformDbContext.cs @@ -26,5 +26,18 @@ public class BlogPlatformDbContext : DbContext // Personnalisation du modèle (non utilisée ici) protected override void OnModelCreating(ModelBuilder modelBuilder) { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity() + .HasOne(c => c.User) // Un commentaire appartient à un seul utilisateur + .WithMany(u => u.Comments) // Un utilisateur peut avoir plusieurs commentaires + .HasForeignKey(c => c.UserId) + .OnDelete(DeleteBehavior.Restrict); // Evite la suppression en de l'utilisateur si des commentaires à lui le sont + + modelBuilder.Entity() + .HasOne(c => c.Post) // Un commentaire est lié à un seul post + .WithMany(p => p.Comments) // Un post peut avoir plusieurs commentaires + .HasForeignKey(c => c.PostId) + .OnDelete(DeleteBehavior.Cascade); // Si un post est supprimé alors les commentaires aussi } } \ No newline at end of file diff --git a/BlogPlatform/Migrations/20251017065027_InitDatabase.Designer.cs b/BlogPlatform/Migrations/20251017065027_InitDatabase.Designer.cs new file mode 100644 index 0000000..5b6903d --- /dev/null +++ b/BlogPlatform/Migrations/20251017065027_InitDatabase.Designer.cs @@ -0,0 +1,166 @@ +// +using System; +using BlogPlatform; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BlogPlatform.Migrations +{ + [DbContext(typeof(BlogPlatformDbContext))] + [Migration("20251017065027_InitDatabase")] + partial class InitDatabase + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("BlogPlatform.Models.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("PostId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("PostId"); + + b.HasIndex("UserId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("Likes") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Posts"); + }); + + modelBuilder.Entity("BlogPlatform.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Salt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Username") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Comment", b => + { + b.HasOne("BlogPlatform.Models.Post", "Post") + .WithMany("Comments") + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BlogPlatform.Models.User", "User") + .WithMany("Comments") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Post"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.HasOne("BlogPlatform.Models.User", "User") + .WithMany("Posts") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.Navigation("Comments"); + }); + + modelBuilder.Entity("BlogPlatform.Models.User", b => + { + b.Navigation("Comments"); + + b.Navigation("Posts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BlogPlatform/Migrations/20251017065027_InitDatabase.cs b/BlogPlatform/Migrations/20251017065027_InitDatabase.cs new file mode 100644 index 0000000..100a298 --- /dev/null +++ b/BlogPlatform/Migrations/20251017065027_InitDatabase.cs @@ -0,0 +1,111 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace BlogPlatform.Migrations +{ + /// + public partial class InitDatabase : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Username = table.Column(type: "nvarchar(max)", nullable: false), + Email = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + Salt = table.Column(type: "nvarchar(max)", nullable: false), + CreatedAt = table.Column(type: "date", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Posts", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Title = table.Column(type: "nvarchar(max)", nullable: false), + Content = table.Column(type: "nvarchar(max)", nullable: false), + Likes = table.Column(type: "int", nullable: false), + CreatedAt = table.Column(type: "date", nullable: false), + UserId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Posts", x => x.Id); + table.ForeignKey( + name: "FK_Posts_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Comments", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Content = table.Column(type: "nvarchar(max)", nullable: false), + CreatedAt = table.Column(type: "date", nullable: false), + PostId = table.Column(type: "int", nullable: false), + UserId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Comments", x => x.Id); + table.ForeignKey( + name: "FK_Comments_Posts_PostId", + column: x => x.PostId, + principalTable: "Posts", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Comments_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_Comments_PostId", + table: "Comments", + column: "PostId"); + + migrationBuilder.CreateIndex( + name: "IX_Comments_UserId", + table: "Comments", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Posts_UserId", + table: "Posts", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Comments"); + + migrationBuilder.DropTable( + name: "Posts"); + + migrationBuilder.DropTable( + name: "Users"); + } + } +} diff --git a/BlogPlatform/Migrations/BlogPlatformDbContextModelSnapshot.cs b/BlogPlatform/Migrations/BlogPlatformDbContextModelSnapshot.cs new file mode 100644 index 0000000..342a73c --- /dev/null +++ b/BlogPlatform/Migrations/BlogPlatformDbContextModelSnapshot.cs @@ -0,0 +1,163 @@ +// +using System; +using BlogPlatform; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BlogPlatform.Migrations +{ + [DbContext(typeof(BlogPlatformDbContext))] + partial class BlogPlatformDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("BlogPlatform.Models.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("PostId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("PostId"); + + b.HasIndex("UserId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("Likes") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Posts"); + }); + + modelBuilder.Entity("BlogPlatform.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("date"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Salt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Username") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Comment", b => + { + b.HasOne("BlogPlatform.Models.Post", "Post") + .WithMany("Comments") + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BlogPlatform.Models.User", "User") + .WithMany("Comments") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Post"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.HasOne("BlogPlatform.Models.User", "User") + .WithMany("Posts") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BlogPlatform.Models.Post", b => + { + b.Navigation("Comments"); + }); + + modelBuilder.Entity("BlogPlatform.Models.User", b => + { + b.Navigation("Comments"); + + b.Navigation("Posts"); + }); +#pragma warning restore 612, 618 + } + } +}