Update persistance

pull/10/head
Louwar 2 years ago
parent 4bbc32febf
commit 8de5d4fd72

@ -1 +1 @@
<mxfile host="app.diagrams.net" modified="2023-02-08T17:52:27.948Z" agent="5.0 (X11; Ubuntu)" etag="qEcwP6k12VCRQHSFScLn" version="20.8.18" type="device"><diagram name="Page-1" id="8ibAM2EW8zS6c9D7bRVZ">7Vtdc6o4GP41Xtoh4UO8tK223emZ6dmenb3ciRAleyJhQ6y6v34TIAgEu24r4rbtDfIQSHieN+9HSAf2zWp7x1ESfWMhpgNohduBfTuA0B37QB4UsssR6LvjHFlyEuYY2APP5G9cgFaBrkmI01pDwRgVJKmDAYtjHIgahjhnm3qzBaP1XhO0xAbwHCBqor+TUEQ56sPRHr/HZBnpnoFXvN8K6cbFm6QRCtmmAtnTgX3DGRP5r9X2BlPFnuYlv2924Go5MI5jcdQNvzwsHTb9jqzR/W/ONV9/x3dDWIw2FTv9xjiUBBSnjIuILVmM6HSPXnO2jkOsHmvJs32bR8YSCQIJ/omF2BVqorVgEorEihZXU8HZz5JPWyL5KFTXB9+ugFK25gF+5ZW0lSC+xOK1V/dLEaT5YrbCgu/kjRxTJMhLfSCoMKNl2W7PtPxRkP0fiC+e+4LouujpiTPJmsSms0cyN2SR5pOon8qCMZeULVgstE6KVIHmmlEArBwoTdMugCeWEkFYLCGKF6IuyzzX9XGuAYrmmD7E9xhlXWaYnGgCkbhyTilKUjLPBqK64ThY81Qy+CtOcwuwSoVfMBd4+7rGpiTFDUPg+cVk2mkE6Om12c9OMC6wqDozNXhyKceGlHeDG3swGcf5gSOB11y2uL02VK2wfxxBB23pIGuwTpnbwhdo4cvuii7gGnxNY0HE7gLIAVbf7DiH/cINi1MmufnyDC2eYeQ0PIPTJqXfImVpA6e3dNMzlBpak6eHbgzeeZUp+8K8gSa/laPp7AIo6t8nQDNZ2HP0A6fiEljq3ZLMsPIs1l95VJu3hA5oeMsxMOWDVlsa5XSmHzC0OkMpkqmfX4RO16WJNziuNDkw885TmbjwEnRYEEpvGGU8G4EN5ghgWOpTuWJZ3nQyuxTl3l1UZrdOOEe7SoOEkViklSc/KaBWGI3c+oT2vcZqgHGL38yY3nDL2Lca9pYPfW99JQdvN0jPcOxlStyWRH05eJUOew2lRnZLfB61pcOgs3S4NdWTs5ZSSVInKYz3Kk0XVxmbed6t9JP9M9N/CgygQc03lCQkXl4CPb1bjuv2EbPNiNuM4ieMwMA+MgSDA9p1HYKh1wjBekmi0+CoaalMjNaK8CsqSolstxEVPX98XFQsp/jpi3vnMqbuKafqsdnyAb3OU+fAC/GZfRAP7X58pG03aw5wBh/p+J9X6Z6CodOsFN3iu3i3wdAsFWcUb78+px6Ihy48sARQi4feeeOhmdAU20q+FGzJaJrzDFjjIwv9DiX0DQkPqkdW2QacKuuKEhIgOqFkqXQRyuGW6KOSoKLanAnBVlqbaxT8XGauu7JEuMj+ZJOss0ma5BuFlAhInyzIVjn762I8t5EQaofRRDEBZ0EYwysilV4QaRD8KpA9wlmIBJIHhUtnONtEElbiDUmaMUmC4QbPhxFLhSxUhynm8iVUS8V8dvccpVhWDv5VogvZdy7sW5ZhD20prlaoZg8aPLk92B8vxdV5zIXvMrI/Xo57NPNun8Q7H29f3dHE95NyQgs01l+8c9QWmpXXYp0RZBLMiew4SxlkHyRJ8dMeqiqKihgYSLmya+UuUmUiIUqj0l7SBAUyzPzIbMXeh7IypJGVjDEzqpLhGQqUFH+EROYmgineZ0T1sEABvkpflqf60Aya8cj3W9OTK/3wakTyu0pQbLNO+P8nKNa/JihYDjH7PYROsh2+MDpURKoVqE6yEVDmneWUbFspP28y4rRp71FRFBA1I/D+WjN9YZin7pJvS7GXTRB9Xf5aquNDLK+u8CqbUPkz5Rjzx+YtDDOT9Io2J66tI2YxbnwOLyDDNTTNckXCMIsrm4gI/Czdg+pzw1FixJrTqN385ti6umq3fReBHYntmtspTyh24S8/n9Qy1jbduuv1LfXo/VJbB6Se0Wwntx9EasfdNcVrecjv+YFXySc0ADg+at2hbb/tGz6CytP9/8nkmdv+343s6T8=</diagram></mxfile> <mxfile host="app.diagrams.net" modified="2023-02-09T08:19:25.870Z" agent="5.0 (Windows)" etag="DZNt0CZmcR1TQeTZIMXP" version="20.8.18" type="device"><diagram name="Page-1" id="8ibAM2EW8zS6c9D7bRVZ">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 74 KiB

@ -7,6 +7,12 @@ Ce projet a été réalisé durant les cours de Entity framework et Consommation
## Architecture ## Architecture
![Image clique droit](/Documentation/img/Architecture_du_projet.png) ![Image clique droit](/Documentation/img/Architecture_du_projet.png)
## Technologie
**Entity Framework Core** est un mappeur de base de données objet moderne pour .NET. Il prend en charge les requêtes LINQ, le suivi des modifications, les mises à jour et les migrations de schéma.
Donc comme vous l'aurez compris, l'EFLib va nous permettre la création, de vos tables et votre persistance.
Notre **API** va relier le tout afin de pouvoir de mettre un intermédiaire entre la base de données et le client final.
## Diagramme de classes du modèle ## Diagramme de classes du modèle
```mermaid ```mermaid
classDiagram classDiagram

@ -44,14 +44,14 @@ namespace API.Mapping
}; };
}*/ }*/
public static EntityChampion ToEF(this ChampionDto championDto) public static EFChampion ToEF(this ChampionDto championDto)
{ {
if (championDto == null) if (championDto == null)
{ {
throw new ArgumentNullException("Dto null"); throw new ArgumentNullException("Dto null");
} }
return new EntityChampion return new EFChampion
{ {
Id = championDto.Id, Id = championDto.Id,
Name = championDto.Name, Name = championDto.Name,

@ -5,6 +5,19 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EFlib\EFlib.csproj" />
<ProjectReference Include="..\StubLib\StubLib.csproj" />
</ItemGroup>
</Project> </Project>

@ -1,2 +1,32 @@
// See https://aka.ms/new-console-template for more information // See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!"); // Console.WriteLine("Hello, World!");
using EFlib;
using StubLib;
//StubData stub = new StubData();
//stub.ChampionsMgr.GetItems(0, 5);
EFChampion boss1 = new EFChampion { Name = "bigBoss", Bio = "KingOfMetal", Icon = "vide" };
EFChampion boss2 = new EFChampion { Name = "Soon", Bio = "Indomptable", Icon = "vide" };
EFChampion boss3 = new EFChampion { Name = "doctorWho", Bio = "Le silence", Icon="vide" };
using (var context = new EFChampionContext())
{
// Crée des EFChampion et les insère dans la base
Console.WriteLine("Creates and inserts new EFChampion");
context.Add(boss1);
context.Add(boss2);
context.Add(boss3);
context.SaveChanges();
}
using (var context = new EFChampionContext())
{
foreach (var n in context.Champions)
{
Console.WriteLine($"{n.Id} - {n.Name}");
}
context.SaveChanges();
}

@ -1,6 +1,6 @@
namespace EFlib namespace EFlib
{ {
public class EntityChampion public class EFChampion
{ {
/**** Attributs ****/ /**** Attributs ****/
public int Id { get; set; } public int Id { get; set; }

@ -0,0 +1,41 @@
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFlib
{
public class EFChampionContext : DbContext
{
/**** Attributs ****/
public DbSet<EFChampion> Champions { get; set; }
/**** Méthodes ****/
public EFChampionContext()
{ }
public EFChampionContext(DbContextOptions<EFChampionContext> options)
: base(options)
{ }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite($"Data Source=projet.dbloulou.db");
}
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
optionsBuilder.UseSqlite(connection);
}
/*
var options = new DbContextOptionsBuilder<TheDbContext>().UseSqlite($"Data Source=LeNomDe.MaBase.db").Options;
var context = new TheDbContext(options); //ou une autre classe dérivant de TheDbContext
await context.Database.EnsureCreatedAsync(); //pour créer la base si elle n'existe pas déjà
*/
}
}

@ -10,7 +10,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace EFlib.Migrations namespace EFlib.Migrations
{ {
[DbContext(typeof(SQLiteContext))] [DbContext(typeof(SQLiteContext))]
[Migration("20230126084305_MyMigration")] [Migration("20230209074746_MyMigration")]
partial class MyMigration partial class MyMigration
{ {
/// <inheritdoc /> /// <inheritdoc />
@ -19,7 +19,7 @@ namespace EFlib.Migrations
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
modelBuilder.Entity("EFlib.Champion", b => modelBuilder.Entity("EFlib.EFChampion", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()

@ -16,7 +16,7 @@ namespace EFlib.Migrations
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
modelBuilder.Entity("EFlib.Champion", b => modelBuilder.Entity("EFlib.EFChampion", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()

@ -11,7 +11,7 @@ namespace EFlib
public class SQLiteContext : DbContext public class SQLiteContext : DbContext
{ {
/**** Attributs ****/ /**** Attributs ****/
public DbSet<EntityChampion> Champions { get; set; } public DbSet<EFChampion> Champions { get; set; }
/**** Méthodes ****/ /**** Méthodes ****/
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

@ -10,7 +10,7 @@ namespace EFlib
internal class SqlServerContext : DbContext internal class SqlServerContext : DbContext
{ {
/**** Attributs ****/ /**** Attributs ****/
public DbSet<EntityChampion> Champions { get; set; } public DbSet<EFChampion> Champions { get; set; }
/**** Méthodes ****/ /**** Méthodes ****/
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {

Binary file not shown.
Loading…
Cancel
Save