diff --git a/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs b/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs deleted file mode 100644 index 36c19de..0000000 --- a/tp1/DbContextLib/Migrations/20240209010818_Mg.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -using DbContextLib; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace DbContextLib.Migrations -{ - [DbContext(typeof(LibraryContext))] - [Migration("20240209010818_Mg")] - partial class Mg - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/DbContextLib/Migrations/20240209010818_Mg.cs b/tp1/DbContextLib/Migrations/20240209010818_Mg.cs deleted file mode 100644 index 0ce9e15..0000000 --- a/tp1/DbContextLib/Migrations/20240209010818_Mg.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DbContextLib.Migrations -{ - /// - public partial class Mg : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BooksSet", - columns: table => new - { - ID = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - Title = table.Column(type: "TEXT", nullable: false), - Author = table.Column(type: "TEXT", nullable: false), - Isbn = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_BooksSet", x => x.ID); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "BooksSet"); - } - } -} diff --git a/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs b/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs deleted file mode 100644 index 61df967..0000000 --- a/tp1/DbContextLib/Migrations/LibraryContextModelSnapshot.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -using DbContextLib; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace DbContextLib.Migrations -{ - [DbContext(typeof(LibraryContext))] - partial class LibraryContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/Entities/BookEntity.cs b/tp1/Entities/BookEntity.cs index 01711d6..1849e64 100644 --- a/tp1/Entities/BookEntity.cs +++ b/tp1/Entities/BookEntity.cs @@ -9,17 +9,14 @@ namespace Entities public class BookEntity { - public int ID { get; set; } + public long ID { get; set; } public string Title { get; set; } public string Author { get; set; } public string Isbn { get; set; } - public PersonEntity? Person { get; set; } + public int PersonId { get; set; } + public PersonEntity? Owner { get; set; } - public BookEntity(string title, string author, string isbn) { - Title = title; - Author = author; - Isbn = isbn; - } + } } diff --git a/tp1/Entities/Entities.csproj b/tp1/Entities/Entities.csproj index bb23fb7..0c79874 100644 --- a/tp1/Entities/Entities.csproj +++ b/tp1/Entities/Entities.csproj @@ -6,4 +6,17 @@ enable + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/tp1/Entities/PersonEntity.cs b/tp1/Entities/PersonEntity.cs index 5f0e45c..8304147 100644 --- a/tp1/Entities/PersonEntity.cs +++ b/tp1/Entities/PersonEntity.cs @@ -8,11 +8,12 @@ namespace Entities { public class PersonEntity { - public long Id { get; set; } + public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } - public ICollection Books { get; set; } + public ICollection Books { get; set; } = new List(); + } } diff --git a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs b/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs deleted file mode 100644 index bb016fa..0000000 --- a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubbedContext))] - [Migration("20240209013745_Mg")] - partial class Mg - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs b/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs deleted file mode 100644 index 9ac614b..0000000 --- a/tp1/StubbedContextLib/Migrations/20240209013745_Mg.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - /// - public partial class Mg : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BooksSet", - columns: table => new - { - ID = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - Title = table.Column(type: "TEXT", nullable: false), - Author = table.Column(type: "TEXT", nullable: false), - Isbn = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_BooksSet", x => x.ID); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "BooksSet"); - } - } -} diff --git a/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs new file mode 100644 index 0000000..154b565 --- /dev/null +++ b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.Designer.cs @@ -0,0 +1,89 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubbedContext))] + [Migration("20240209155948_Mg")] + partial class Mg + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Author") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Isbn") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("OwnerId") + .HasColumnType("INTEGER"); + + b.Property("PersonId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("OwnerId"); + + b.ToTable("BooksSet"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("PersonSet"); + }); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.HasOne("Entities.PersonEntity", "Owner") + .WithMany("Books") + .HasForeignKey("OwnerId"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Navigation("Books"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs new file mode 100644 index 0000000..f03f257 --- /dev/null +++ b/tp1/StubbedContextLib/Migrations/20240209155948_Mg.cs @@ -0,0 +1,65 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + /// + public partial class Mg : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "PersonSet", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + FirstName = table.Column(type: "TEXT", nullable: false), + LastName = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PersonSet", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BooksSet", + columns: table => new + { + ID = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Title = table.Column(type: "TEXT", nullable: false), + Author = table.Column(type: "TEXT", nullable: false), + Isbn = table.Column(type: "TEXT", nullable: false), + PersonId = table.Column(type: "INTEGER", nullable: false), + OwnerId = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BooksSet", x => x.ID); + table.ForeignKey( + name: "FK_BooksSet_PersonSet_OwnerId", + column: x => x.OwnerId, + principalTable: "PersonSet", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_BooksSet_OwnerId", + table: "BooksSet", + column: "OwnerId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BooksSet"); + + migrationBuilder.DropTable( + name: "PersonSet"); + } + } +} diff --git a/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs b/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs index 1454cd1..3e7e88c 100644 --- a/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs +++ b/tp1/StubbedContextLib/Migrations/StubbedContextModelSnapshot.cs @@ -1,44 +1,86 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubbedContext))] - partial class StubbedContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); - - modelBuilder.Entity("Entities.BookEntity", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Author") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Isbn") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("ID"); - - b.ToTable("BooksSet"); - }); -#pragma warning restore 612, 618 - } - } -} +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubbedContext))] + partial class StubbedContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Author") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Isbn") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("OwnerId") + .HasColumnType("INTEGER"); + + b.Property("PersonId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("OwnerId"); + + b.ToTable("BooksSet"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("PersonSet"); + }); + + modelBuilder.Entity("Entities.BookEntity", b => + { + b.HasOne("Entities.PersonEntity", "Owner") + .WithMany("Books") + .HasForeignKey("OwnerId"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("Entities.PersonEntity", b => + { + b.Navigation("Books"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tp1/StubbedContextLib/StubbedContext.cs b/tp1/StubbedContextLib/StubbedContext.cs index 418364f..4f79e00 100644 --- a/tp1/StubbedContextLib/StubbedContext.cs +++ b/tp1/StubbedContextLib/StubbedContext.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -15,8 +16,14 @@ namespace StubbedContextLib public List Books { get; set; } = new List(); public StubbedContext() { - Books.Add(new BookEntity("test", "test", "test")); - Books.Add(new BookEntity("test2", "test2", "test2")); + BookEntity b0 = new BookEntity() { Title = "test", Author = "test", Isbn = "test" }; + BookEntity b1 = new BookEntity() { Title = "test2", Author = "test2", Isbn = "test2" }; + Books.Add(b0); + Books.Add(b1); + Collection CB = new Collection(); + CB.Add(b0); + CB.Add(b1); + Persons.Add(new PersonEntity() { FirstName = "coco", LastName = "test", Books = CB }); } } diff --git a/tp1/TestStub/Program.cs b/tp1/TestStub/Program.cs index 0174c20..abff6f4 100644 --- a/tp1/TestStub/Program.cs +++ b/tp1/TestStub/Program.cs @@ -2,26 +2,33 @@ using Entities; using DbContextLib; using Microsoft.Extensions.Options; +using System.Reflection; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore; // See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!"); using (var context = new LibraryContext()) { - BookEntity chewie = new BookEntity("B3", "test1", "test1"); - BookEntity princeOfPersia = new BookEntity ("B4", "test2", "test2"); - BookEntity PercyJackson = new BookEntity ("mistake", "test3", "test3"); - BookEntity the100 = new BookEntity("the100", "test4", "test4"); - context.BooksSet.Add(chewie); - context.BooksSet.Add(princeOfPersia); - context.BooksSet.Add(PercyJackson); - context.BooksSet.Add(the100); + context.Database.EnsureCreated(); + + PersonEntity p1 = new PersonEntity() { FirstName = "Tom", LastName = "Rambeau" }; + PersonEntity p2 = new PersonEntity() { FirstName = "Erwan", LastName = "Manager" }; + BookEntity chewie = new BookEntity() { Title = "mistake", Author = "test1", Isbn ="test1"}; + BookEntity the100 = new BookEntity() { Title = "the100", Author = "test4", Isbn = "test4", Owner = p1 }; + BookEntity GOT = new BookEntity() { Title = "GOT", Author = "lastTest", Isbn = "lastTest"}; + + context.Add(p1); + context.Add(p2); + context.Add(chewie); + context.Add(GOT); + context.Add(the100); context.SaveChanges(); } - using (var context = new LibraryContext()) { foreach (var n in context.BooksSet) @@ -48,4 +55,82 @@ using (var context = new LibraryContext()) context.Remove(impostor); context.SaveChanges(); +} + +using (var context = new LibraryContext()) +{ + Console.WriteLine("All people"); + var people = context.PersonSet; + foreach(var p in people) + { + Console.WriteLine($"firstname: {p.FirstName}, lastname: {p.LastName}"); + } +} + +//emprunt +using (var context = new LibraryContext()) +{ + var books = context.BooksSet; + foreach(var book in books) + { + if (book.Owner == null) + { + book.Owner = context.PersonSet.Where(b => b.FirstName.StartsWith("E")).Include(b => b.Books).First(); + Console.WriteLine($" nouveau propriétaire du livre: {book.Owner.FirstName}"); + break; + } + } + + context.SaveChanges(); +} + + +//Rendu +using (var context = new LibraryContext()) +{ + + var books = context.BooksSet; + if (books != null) + { + foreach (var book in books) + { + //Console.WriteLine(book.Owner.FirstName); + if (book.Owner != null) + { + Console.WriteLine($" propriétaire du livre avant rendu : {book.Owner.FirstName}"); + book.Owner = null; + Console.WriteLine("propriétaire a rendu le libre"); + break; + } + else + { + Console.WriteLine("livre sans propriétaire" + book.Title); + } + } + } + + context.SaveChanges(); +} + + +//DeleteAllItem +using (var context = new LibraryContext()) +{ + var allBooks = context.BooksSet; + if ( allBooks != null) + { + foreach (var book in allBooks) + { + context.BooksSet.Remove(book); + } + } + var allPeople = context.PersonSet; + if (allBooks != null) + { + foreach (var person in allPeople) + { + context.PersonSet.Remove(person); + } + } + context.SaveChanges(); } \ No newline at end of file diff --git a/tp1/TestStub/tp.Books.db b/tp1/TestStub/tp.Books.db index e005c58..4c5cf76 100644 Binary files a/tp1/TestStub/tp.Books.db and b/tp1/TestStub/tp.Books.db differ diff --git a/tp1/UnitTests/UnitTest1.cs b/tp1/UnitTests/UnitTest1.cs index af18152..d01262c 100644 --- a/tp1/UnitTests/UnitTest1.cs +++ b/tp1/UnitTests/UnitTest1.cs @@ -25,7 +25,7 @@ namespace UnitTests //context.Database.OpenConnection(); context.Database.EnsureCreated(); - BookEntity the100 = new BookEntity( "the100", "", "" ); + BookEntity the100 = new BookEntity { Title = "the100", Author = "", Isbn = "" }; BookEntity princeOfPersia = new BookEntity ( "princeOfPersia", "", "" ); BookEntity PercyJackson = new BookEntity ("PercyJackson", "", "" ); context.BooksSet.Add(the100);