diff --git a/EntityFramework_LoL/Sources/Business/DbData.Runes.cs b/EntityFramework_LoL/Sources/Business/DbData.Runes.cs index 3b827e1..118c9cf 100644 --- a/EntityFramework_LoL/Sources/Business/DbData.Runes.cs +++ b/EntityFramework_LoL/Sources/Business/DbData.Runes.cs @@ -1,4 +1,5 @@ using EntityMapper; +using Microsoft.EntityFrameworkCore; using Model; using Shared; @@ -14,14 +15,33 @@ namespace Business => this.parent = parent; public async Task AddItem(Rune? item) { - await parent.DbContext.runes.AddAsync(item.ToEntity()); + try + { + await parent.DbContext.runes.AddAsync(item.ToEntity(parent.DbContext)); + parent.DbContext.SaveChanges(); + } + catch (OperationCanceledException) {} + catch (DbUpdateException) { } return item; } public async Task DeleteItem(Rune? item) { - parent.DbContext.runes.Remove(item.ToEntity()); - return true; + try + { + var toDelete = parent.DbContext.runes.Find(item?.Name); + if (toDelete != null) + { + parent.DbContext.runes.Remove(item?.ToEntity(parent.DbContext)); + parent.DbContext.SaveChanges(); + return true; + } + return false; + } + catch (DbUpdateException) + { + return false; + } } public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) @@ -65,8 +85,15 @@ namespace Business public async Task UpdateItem(Rune? oldItem, Rune? newItem) { - parent.DbContext.runes.Remove(oldItem.ToEntity()); - parent.DbContext.runes.Add(newItem.ToEntity()); + var toUpdate = parent.DbContext.runes.Find(oldItem.Name); + try + { + toUpdate.Description = newItem.Description; + toUpdate.RuneFamily = newItem.Family; + parent.DbContext.SaveChanges(); + + } + catch (DbUpdateException) {} return newItem; } } diff --git a/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.Designer.cs b/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.Designer.cs deleted file mode 100644 index e62e66e..0000000 --- a/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.Designer.cs +++ /dev/null @@ -1,411 +0,0 @@ -// -using System; -using Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Entities.Migrations -{ - [DbContext(typeof(LolDbContext))] - [Migration("20230301162639_myFirstMigration")] - partial class myFirstMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); - - modelBuilder.Entity("ChampionEntityRunePageEntity", b => - { - b.Property("championsName") - .HasColumnType("TEXT"); - - b.Property("runepagesId") - .HasColumnType("TEXT"); - - b.HasKey("championsName", "runepagesId"); - - b.HasIndex("runepagesId"); - - b.ToTable("ChampionEntityRunePageEntity"); - }); - - modelBuilder.Entity("ChampionEntitySkillEntity", b => - { - b.Property("ChampionsName") - .HasColumnType("TEXT"); - - b.Property("SkillsName") - .HasColumnType("TEXT"); - - b.HasKey("ChampionsName", "SkillsName"); - - b.HasIndex("SkillsName"); - - b.ToTable("ChampionEntitySkillEntity"); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Bio") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Class") - .HasColumnType("INTEGER"); - - b.Property("Icon") - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.HasKey("Name"); - - b.HasIndex("ImageId"); - - b.ToTable("champions"); - - b.HasData( - new - { - Name = "Dave", - Bio = "Le meilleur Jazzman de France", - Class = 2 - }, - new - { - Name = "Armure", - Bio = "Solide", - Class = 6 - }); - }); - - modelBuilder.Entity("Entities.CharacteristicEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("ChampionForeignKey") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("INTEGER"); - - b.HasKey("Name", "ChampionForeignKey"); - - b.HasIndex("ChampionForeignKey"); - - b.ToTable("characteristics"); - - b.HasData( - new - { - Name = "Force", - ChampionForeignKey = "Dave", - Value = 50 - }, - new - { - Name = "Défense", - ChampionForeignKey = "Armure", - Value = 75 - }); - }); - - modelBuilder.Entity("Entities.LargeImageEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Base64") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("largeimages"); - - b.HasData( - new - { - Id = new Guid("d3a490c6-fb49-475a-9134-47c2de9888d2"), - Base64 = "aaa" - }); - }); - - modelBuilder.Entity("Entities.RuneEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.Property("RuneFamily") - .HasColumnType("INTEGER"); - - b.HasKey("Name"); - - b.HasIndex("ImageId"); - - b.ToTable("runes"); - - b.HasData( - new - { - Name = "Bullseye", - Description = "Steady shot", - RuneFamily = 1 - }, - new - { - Name = "Alkatraz", - Description = "Lock effect", - RuneFamily = 2 - }); - }); - - modelBuilder.Entity("Entities.RunePageEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("runepages"); - - b.HasData( - new - { - Id = new Guid("4ea04d4f-0a64-4d28-8d74-4499dbc541f2"), - Name = "Runepage_1" - }); - }); - - modelBuilder.Entity("Entities.RunePageRuneEntity", b => - { - b.Property("runepagesId") - .HasColumnType("TEXT"); - - b.Property("runesName") - .HasColumnType("TEXT"); - - b.Property("Category") - .HasColumnType("INTEGER"); - - b.HasKey("runepagesId", "runesName"); - - b.HasIndex("runesName"); - - b.ToTable("RunePageRuneEntity"); - }); - - modelBuilder.Entity("Entities.SkillEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("SkillType") - .HasColumnType("INTEGER"); - - b.HasKey("Name"); - - b.ToTable("skills"); - - b.HasData( - new - { - Name = "Boule de feu", - Description = "Fire!", - SkillType = 1 - }, - new - { - Name = "White Star", - Description = "Random damage", - SkillType = 3 - }); - }); - - modelBuilder.Entity("Entities.SkinEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("ChampionForeignKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.Property("Price") - .HasColumnType("REAL"); - - b.HasKey("Name"); - - b.HasIndex("ChampionForeignKey"); - - b.HasIndex("ImageId"); - - b.ToTable("skins"); - - b.HasData( - new - { - Name = "Dave de glace", - ChampionForeignKey = "Dave", - Description = "Enneigé", - Icon = "aaa", - Price = 7.99f - }, - new - { - Name = "Armure Fullspeed", - ChampionForeignKey = "Armure", - Description = "Deja vu", - Icon = "aaa", - Price = 9.99f - }); - }); - - modelBuilder.Entity("ChampionEntityRunePageEntity", b => - { - b.HasOne("Entities.ChampionEntity", null) - .WithMany() - .HasForeignKey("championsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.RunePageEntity", null) - .WithMany() - .HasForeignKey("runepagesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ChampionEntitySkillEntity", b => - { - b.HasOne("Entities.ChampionEntity", null) - .WithMany() - .HasForeignKey("ChampionsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.SkillEntity", null) - .WithMany() - .HasForeignKey("SkillsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.CharacteristicEntity", b => - { - b.HasOne("Entities.ChampionEntity", "Champion") - .WithMany("Characteristics") - .HasForeignKey("ChampionForeignKey") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Champion"); - }); - - modelBuilder.Entity("Entities.RuneEntity", b => - { - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.RunePageRuneEntity", b => - { - b.HasOne("Entities.RunePageEntity", null) - .WithMany() - .HasForeignKey("runepagesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.RuneEntity", null) - .WithMany() - .HasForeignKey("runesName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Entities.SkinEntity", b => - { - b.HasOne("Entities.ChampionEntity", "Champion") - .WithMany() - .HasForeignKey("ChampionForeignKey") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Champion"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.Navigation("Characteristics"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.cs b/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.cs deleted file mode 100644 index e3dd73d..0000000 --- a/EntityFramework_LoL/Sources/Entities/Migrations/20230301162639_myFirstMigration.cs +++ /dev/null @@ -1,341 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Entities.Migrations -{ - /// - public partial class myFirstMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "largeimages", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Base64 = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_largeimages", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "runepages", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_runepages", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "skills", - columns: table => new - { - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false), - Description = table.Column(type: "TEXT", maxLength: 500, nullable: false), - SkillType = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_skills", x => x.Name); - }); - - migrationBuilder.CreateTable( - name: "champions", - columns: table => new - { - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false), - Bio = table.Column(type: "TEXT", maxLength: 500, nullable: false), - Icon = table.Column(type: "TEXT", nullable: true), - Class = table.Column(type: "INTEGER", nullable: false), - ImageId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_champions", x => x.Name); - table.ForeignKey( - name: "FK_champions_largeimages_ImageId", - column: x => x.ImageId, - principalTable: "largeimages", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "runes", - columns: table => new - { - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false), - Description = table.Column(type: "TEXT", maxLength: 500, nullable: false), - RuneFamily = table.Column(type: "INTEGER", nullable: false), - ImageId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_runes", x => x.Name); - table.ForeignKey( - name: "FK_runes_largeimages_ImageId", - column: x => x.ImageId, - principalTable: "largeimages", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "ChampionEntityRunePageEntity", - columns: table => new - { - championsName = table.Column(type: "TEXT", nullable: false), - runepagesId = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ChampionEntityRunePageEntity", x => new { x.championsName, x.runepagesId }); - table.ForeignKey( - name: "FK_ChampionEntityRunePageEntity_champions_championsName", - column: x => x.championsName, - principalTable: "champions", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ChampionEntityRunePageEntity_runepages_runepagesId", - column: x => x.runepagesId, - principalTable: "runepages", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "ChampionEntitySkillEntity", - columns: table => new - { - ChampionsName = table.Column(type: "TEXT", nullable: false), - SkillsName = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ChampionEntitySkillEntity", x => new { x.ChampionsName, x.SkillsName }); - table.ForeignKey( - name: "FK_ChampionEntitySkillEntity_champions_ChampionsName", - column: x => x.ChampionsName, - principalTable: "champions", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ChampionEntitySkillEntity_skills_SkillsName", - column: x => x.SkillsName, - principalTable: "skills", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "characteristics", - columns: table => new - { - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false), - ChampionForeignKey = table.Column(type: "TEXT", nullable: false), - Value = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_characteristics", x => new { x.Name, x.ChampionForeignKey }); - table.ForeignKey( - name: "FK_characteristics_champions_ChampionForeignKey", - column: x => x.ChampionForeignKey, - principalTable: "champions", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "skins", - columns: table => new - { - Name = table.Column(type: "TEXT", maxLength: 256, nullable: false), - Description = table.Column(type: "TEXT", maxLength: 500, nullable: false), - Icon = table.Column(type: "TEXT", nullable: false), - Price = table.Column(type: "REAL", nullable: false), - ChampionForeignKey = table.Column(type: "TEXT", nullable: false), - ImageId = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_skins", x => x.Name); - table.ForeignKey( - name: "FK_skins_champions_ChampionForeignKey", - column: x => x.ChampionForeignKey, - principalTable: "champions", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_skins_largeimages_ImageId", - column: x => x.ImageId, - principalTable: "largeimages", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "RunePageRuneEntity", - columns: table => new - { - runepagesId = table.Column(type: "TEXT", nullable: false), - runesName = table.Column(type: "TEXT", nullable: false), - Category = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_RunePageRuneEntity", x => new { x.runepagesId, x.runesName }); - table.ForeignKey( - name: "FK_RunePageRuneEntity_runepages_runepagesId", - column: x => x.runepagesId, - principalTable: "runepages", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RunePageRuneEntity_runes_runesName", - column: x => x.runesName, - principalTable: "runes", - principalColumn: "Name", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "champions", - columns: new[] { "Name", "Bio", "Class", "Icon", "ImageId" }, - values: new object[,] - { - { "Armure", "Solide", 6, null, null }, - { "Dave", "Le meilleur Jazzman de France", 2, null, null } - }); - - migrationBuilder.InsertData( - table: "largeimages", - columns: new[] { "Id", "Base64" }, - values: new object[] { new Guid("d3a490c6-fb49-475a-9134-47c2de9888d2"), "aaa" }); - - migrationBuilder.InsertData( - table: "runepages", - columns: new[] { "Id", "Name" }, - values: new object[] { new Guid("4ea04d4f-0a64-4d28-8d74-4499dbc541f2"), "Runepage_1" }); - - migrationBuilder.InsertData( - table: "runes", - columns: new[] { "Name", "Description", "ImageId", "RuneFamily" }, - values: new object[,] - { - { "Alkatraz", "Lock effect", null, 2 }, - { "Bullseye", "Steady shot", null, 1 } - }); - - migrationBuilder.InsertData( - table: "skills", - columns: new[] { "Name", "Description", "SkillType" }, - values: new object[,] - { - { "Boule de feu", "Fire!", 1 }, - { "White Star", "Random damage", 3 } - }); - - migrationBuilder.InsertData( - table: "characteristics", - columns: new[] { "ChampionForeignKey", "Name", "Value" }, - values: new object[,] - { - { "Armure", "Défense", 75 }, - { "Dave", "Force", 50 } - }); - - migrationBuilder.InsertData( - table: "skins", - columns: new[] { "Name", "ChampionForeignKey", "Description", "Icon", "ImageId", "Price" }, - values: new object[,] - { - { "Armure Fullspeed", "Armure", "Deja vu", "aaa", null, 9.99f }, - { "Dave de glace", "Dave", "Enneigé", "aaa", null, 7.99f } - }); - - migrationBuilder.CreateIndex( - name: "IX_ChampionEntityRunePageEntity_runepagesId", - table: "ChampionEntityRunePageEntity", - column: "runepagesId"); - - migrationBuilder.CreateIndex( - name: "IX_ChampionEntitySkillEntity_SkillsName", - table: "ChampionEntitySkillEntity", - column: "SkillsName"); - - migrationBuilder.CreateIndex( - name: "IX_champions_ImageId", - table: "champions", - column: "ImageId"); - - migrationBuilder.CreateIndex( - name: "IX_characteristics_ChampionForeignKey", - table: "characteristics", - column: "ChampionForeignKey"); - - migrationBuilder.CreateIndex( - name: "IX_RunePageRuneEntity_runesName", - table: "RunePageRuneEntity", - column: "runesName"); - - migrationBuilder.CreateIndex( - name: "IX_runes_ImageId", - table: "runes", - column: "ImageId"); - - migrationBuilder.CreateIndex( - name: "IX_skins_ChampionForeignKey", - table: "skins", - column: "ChampionForeignKey"); - - migrationBuilder.CreateIndex( - name: "IX_skins_ImageId", - table: "skins", - column: "ImageId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ChampionEntityRunePageEntity"); - - migrationBuilder.DropTable( - name: "ChampionEntitySkillEntity"); - - migrationBuilder.DropTable( - name: "characteristics"); - - migrationBuilder.DropTable( - name: "RunePageRuneEntity"); - - migrationBuilder.DropTable( - name: "skins"); - - migrationBuilder.DropTable( - name: "skills"); - - migrationBuilder.DropTable( - name: "runepages"); - - migrationBuilder.DropTable( - name: "runes"); - - migrationBuilder.DropTable( - name: "champions"); - - migrationBuilder.DropTable( - name: "largeimages"); - } - } -} diff --git a/EntityFramework_LoL/Sources/Entities/Migrations/LolDbContextModelSnapshot.cs b/EntityFramework_LoL/Sources/Entities/Migrations/LolDbContextModelSnapshot.cs deleted file mode 100644 index e343e94..0000000 --- a/EntityFramework_LoL/Sources/Entities/Migrations/LolDbContextModelSnapshot.cs +++ /dev/null @@ -1,408 +0,0 @@ -// -using System; -using Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Entities.Migrations -{ - [DbContext(typeof(LolDbContext))] - partial class LolDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); - - modelBuilder.Entity("ChampionEntityRunePageEntity", b => - { - b.Property("championsName") - .HasColumnType("TEXT"); - - b.Property("runepagesId") - .HasColumnType("TEXT"); - - b.HasKey("championsName", "runepagesId"); - - b.HasIndex("runepagesId"); - - b.ToTable("ChampionEntityRunePageEntity"); - }); - - modelBuilder.Entity("ChampionEntitySkillEntity", b => - { - b.Property("ChampionsName") - .HasColumnType("TEXT"); - - b.Property("SkillsName") - .HasColumnType("TEXT"); - - b.HasKey("ChampionsName", "SkillsName"); - - b.HasIndex("SkillsName"); - - b.ToTable("ChampionEntitySkillEntity"); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Bio") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Class") - .HasColumnType("INTEGER"); - - b.Property("Icon") - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.HasKey("Name"); - - b.HasIndex("ImageId"); - - b.ToTable("champions"); - - b.HasData( - new - { - Name = "Dave", - Bio = "Le meilleur Jazzman de France", - Class = 2 - }, - new - { - Name = "Armure", - Bio = "Solide", - Class = 6 - }); - }); - - modelBuilder.Entity("Entities.CharacteristicEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("ChampionForeignKey") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("INTEGER"); - - b.HasKey("Name", "ChampionForeignKey"); - - b.HasIndex("ChampionForeignKey"); - - b.ToTable("characteristics"); - - b.HasData( - new - { - Name = "Force", - ChampionForeignKey = "Dave", - Value = 50 - }, - new - { - Name = "Défense", - ChampionForeignKey = "Armure", - Value = 75 - }); - }); - - modelBuilder.Entity("Entities.LargeImageEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Base64") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("largeimages"); - - b.HasData( - new - { - Id = new Guid("d3a490c6-fb49-475a-9134-47c2de9888d2"), - Base64 = "aaa" - }); - }); - - modelBuilder.Entity("Entities.RuneEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.Property("RuneFamily") - .HasColumnType("INTEGER"); - - b.HasKey("Name"); - - b.HasIndex("ImageId"); - - b.ToTable("runes"); - - b.HasData( - new - { - Name = "Bullseye", - Description = "Steady shot", - RuneFamily = 1 - }, - new - { - Name = "Alkatraz", - Description = "Lock effect", - RuneFamily = 2 - }); - }); - - modelBuilder.Entity("Entities.RunePageEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("runepages"); - - b.HasData( - new - { - Id = new Guid("4ea04d4f-0a64-4d28-8d74-4499dbc541f2"), - Name = "Runepage_1" - }); - }); - - modelBuilder.Entity("Entities.RunePageRuneEntity", b => - { - b.Property("runepagesId") - .HasColumnType("TEXT"); - - b.Property("runesName") - .HasColumnType("TEXT"); - - b.Property("Category") - .HasColumnType("INTEGER"); - - b.HasKey("runepagesId", "runesName"); - - b.HasIndex("runesName"); - - b.ToTable("RunePageRuneEntity"); - }); - - modelBuilder.Entity("Entities.SkillEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("SkillType") - .HasColumnType("INTEGER"); - - b.HasKey("Name"); - - b.ToTable("skills"); - - b.HasData( - new - { - Name = "Boule de feu", - Description = "Fire!", - SkillType = 1 - }, - new - { - Name = "White Star", - Description = "Random damage", - SkillType = 3 - }); - }); - - modelBuilder.Entity("Entities.SkinEntity", b => - { - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("ChampionForeignKey") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ImageId") - .HasColumnType("TEXT"); - - b.Property("Price") - .HasColumnType("REAL"); - - b.HasKey("Name"); - - b.HasIndex("ChampionForeignKey"); - - b.HasIndex("ImageId"); - - b.ToTable("skins"); - - b.HasData( - new - { - Name = "Dave de glace", - ChampionForeignKey = "Dave", - Description = "Enneigé", - Icon = "aaa", - Price = 7.99f - }, - new - { - Name = "Armure Fullspeed", - ChampionForeignKey = "Armure", - Description = "Deja vu", - Icon = "aaa", - Price = 9.99f - }); - }); - - modelBuilder.Entity("ChampionEntityRunePageEntity", b => - { - b.HasOne("Entities.ChampionEntity", null) - .WithMany() - .HasForeignKey("championsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.RunePageEntity", null) - .WithMany() - .HasForeignKey("runepagesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ChampionEntitySkillEntity", b => - { - b.HasOne("Entities.ChampionEntity", null) - .WithMany() - .HasForeignKey("ChampionsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.SkillEntity", null) - .WithMany() - .HasForeignKey("SkillsName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.CharacteristicEntity", b => - { - b.HasOne("Entities.ChampionEntity", "Champion") - .WithMany("Characteristics") - .HasForeignKey("ChampionForeignKey") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Champion"); - }); - - modelBuilder.Entity("Entities.RuneEntity", b => - { - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.RunePageRuneEntity", b => - { - b.HasOne("Entities.RunePageEntity", null) - .WithMany() - .HasForeignKey("runepagesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.RuneEntity", null) - .WithMany() - .HasForeignKey("runesName") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Entities.SkinEntity", b => - { - b.HasOne("Entities.ChampionEntity", "Champion") - .WithMany() - .HasForeignKey("ChampionForeignKey") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Entities.LargeImageEntity", "Image") - .WithMany() - .HasForeignKey("ImageId"); - - b.Navigation("Champion"); - - b.Navigation("Image"); - }); - - modelBuilder.Entity("Entities.ChampionEntity", b => - { - b.Navigation("Characteristics"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/EntityFramework_LoL/Sources/EntityMappers/RuneMapper.cs b/EntityFramework_LoL/Sources/EntityMappers/RuneMapper.cs index 05c8bf2..472f94c 100644 --- a/EntityFramework_LoL/Sources/EntityMappers/RuneMapper.cs +++ b/EntityFramework_LoL/Sources/EntityMappers/RuneMapper.cs @@ -1,20 +1,29 @@ using Entities; using Model; +using System.Reflection.Metadata.Ecma335; namespace EntityMapper { public static class RuneMapper { - public static RuneEntity ToEntity(this Rune item) + public static RuneEntity ToEntity(this Rune item, LolDbContext context) { - throw new NotImplementedException(); + RuneEntity runeEntity = context.runes.Find(item.Name); + if (runeEntity == null) { + return new() + { + Name = item.Name, + Description = item.Description, + RuneFamily = item.Family + }; + } + return runeEntity; } public static Rune ToModel(this RuneEntity entity) { - throw new NotImplementedException(); - + return new Rune(entity.Name, entity.RuneFamily, "", "", entity.Description); } } diff --git a/EntityFramework_LoL/Sources/TestEF/TestRunes.cs b/EntityFramework_LoL/Sources/TestEF/TestRunes.cs new file mode 100644 index 0000000..734753f --- /dev/null +++ b/EntityFramework_LoL/Sources/TestEF/TestRunes.cs @@ -0,0 +1,160 @@ +using Business; +using Entities; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Model; +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TestEF +{ + public class TestRunes + { + + [Fact] + public async void Test_Add() + { + //connection must be opened to use In-memory database + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + Model.Rune rune1 = new("Sanglante", RuneFamily.Domination); + Model.Rune rune2 = new("Oeil de l'esprit", RuneFamily.Precision); + Model.Rune rune3 = new("Concrétisation", RuneFamily.Unknown); + + await manager.AddItem(rune1); + await manager.AddItem(rune2); + await manager.AddItem(rune3); + } + + //uses another instance of the context to do the tests + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + var nbItems = await manager.GetNbItems(); + Assert.Equal(3, nbItems); + + var items = await manager.GetItemsByName("Sanglante", 0, nbItems); + Assert.Equal("Sanglante", items.First().Name); + + Assert.Equal(1, await manager.GetNbItemsByName("Concrétisation")); + + items = await manager.GetItemsByFamily(RuneFamily.Precision, 0, nbItems); + Assert.Equal("Oeil de l'esprit", items.First().Name); + + Assert.Equal(1, await manager.GetNbItemsByFamily(RuneFamily.Unknown)); + } + } + + + [Fact] + public async void Test_Update() + { + //connection must be opened to use In-memory database + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + + Model.Rune rune1 = new("Sanglante", RuneFamily.Domination); + Model.Rune rune2 = new("Oeil de l'esprit", RuneFamily.Precision); + Model.Rune rune3 = new("Concrétisation", RuneFamily.Unknown); + + await manager.AddItem(rune1); + await manager.AddItem(rune2); + await manager.AddItem(rune3); + } + + //uses another instance of the context to do the tests + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + Assert.Equal(1, await manager.GetNbItemsByFamily(RuneFamily.Precision)); + + Model.Rune before = new("Concrétisation", RuneFamily.Unknown); + Model.Rune after = new("Concrétisation", RuneFamily.Precision); + + await manager.UpdateItem(before, after); + + Assert.Equal(2, await manager.GetNbItemsByFamily(RuneFamily.Precision)); + + context.SaveChanges(); + } + } + + [Fact] + public async void Test_Delete() + { + //connection must be opened to use In-memory database + var connection = new SqliteConnection("DataSource=:memory:"); + connection.Open(); + + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + + //prepares the database with one instance of the context + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + Model.Rune rune1 = new("Sanglante", RuneFamily.Domination); + Model.Rune rune2 = new("Oeil de l'esprit", RuneFamily.Precision); + Model.Rune rune3 = new("Concrétisation", RuneFamily.Unknown); + + await manager.AddItem(rune1); + await manager.AddItem(rune2); + await manager.AddItem(rune3); + } + + //uses another instance of the context to do the tests + using (var context = new LolDbContext(options)) + { + var manager = new DbData(context).RunesMgr; + + context.Database.EnsureCreated(); + + Assert.Equal(3, await manager.GetNbItems()); + + await manager.DeleteItem(new("Concrétisation", RuneFamily.Unknown)); + + Assert.Equal(2, await manager.GetNbItems()); + + Assert.Equal(0, await manager.GetNbItemsByName("Concrétisation")); + + } + + } + } +}