diff --git a/ex_042_001_EF_CodeFirst_conventions/Nounours.cs b/ex_042_001_EF_CodeFirst_conventions/Nounours.cs
deleted file mode 100644
index f48f93c..0000000
--- a/ex_042_001_EF_CodeFirst_conventions/Nounours.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Nounours.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-
-namespace ex_042_001_EF_CodeFirst_conventions
-{
- ///
- /// Nounours est une classe POCO, i.e. Plain Old CLR Object.
- /// Elle contient 3 propriétés en lecture/écriture : Nom, DateDeNaissance et NbPoils. Nous parlerons de la 4ème (ID) dans un moment.
- /// Entity Framework va utiliser la classe POCO Nounours pour créer une table dans la base de données, lorsque le DbSet va être créé (nous verrons ça dans la classe NounoursDBEntities).
- ///
- /// L'utilisation des conventions d'écriture d'Entity Framework font que la table qui va être créée aura :
- /// - un nom correspondant au nom de la classe POCO : ici "Nounours"
- /// - une colonne pour chaque propriété publique : ici, "Nom", "DateDeNaissance" et "NbPoils"
- ///
- /// De plus, en rajoutant une propriété de type int et avec le nom "ID", Entity Framework ajoute directement une colonne "ID" et l'utilise comme clé primaire.
- ///
- public class Nounours
- {
- public int ID
- {
- get; set;
- }
-
- public string Nom
- {
- get;
- set;
- }
-
- public DateTime DateDeNaissance
- {
- get;
- set;
- }
-
- public int NbPoils
- {
- get;
- set;
- }
-
- ///
- /// returns a hash code in order to use this class in hash table
- ///
- /// hash code
- public override int GetHashCode()
- {
- return Nom.GetHashCode();
- }
-
- ///
- /// checks if the "right" object is equal to this Nounours or not
- ///
- /// the other object to be compared with this Nounours
- /// true if equals, false if not
- public override bool Equals(object right)
- {
- //check null
- if (object.ReferenceEquals(right, null))
- {
- return false;
- }
-
- if (object.ReferenceEquals(this, right))
- {
- return true;
- }
-
- if (this.GetType() != right.GetType())
- {
- return false;
- }
-
- return this.Equals(right as Nounours);
- }
-
- ///
- /// checks if this Nounours is equal to the other Nounours
- ///
- /// the other Nounours to be compared with
- /// true if equals
- public bool Equals(Nounours other)
- {
- return (this.Nom.Equals(other.Nom) && this.DateDeNaissance == other.DateDeNaissance);
- }
-
- public override string ToString()
- {
- return $"{ID}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
- }
-
- }
-}
diff --git a/ex_042_001_EF_CodeFirst_conventions/NounoursDBEntities.cs b/ex_042_001_EF_CodeFirst_conventions/NounoursDBEntities.cs
deleted file mode 100644
index 1816354..0000000
--- a/ex_042_001_EF_CodeFirst_conventions/NounoursDBEntities.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : NounoursDBEntities.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-
-namespace ex_042_001_EF_CodeFirst_conventions
-{
- ///
- /// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
- /// Cette classe contient un DbSet pour permettre de réaliser des opérations CRUD sur le type T, ici Nounours.
- ///
- /// Lorsque nous utiliserons cette classe, le programme cherchera la chaîne de connection (connectionString) avec le même nom que celui passé
- /// dans le constructeur de DbContext (ici NounoursDBContext). Il cherche la connectionString à différents endroits et en particulier ici
- /// dans App.config.
- /// Si cette table n'existe pas, il va la créer automatiquement. Ceci est configurable et sera présenté dans les exemples suivants.
- ///
- class NounoursDBEntities : DbContext
- {
- public virtual DbSet NounoursSet { get; set; }
-
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- // optionsBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Initial Catalog=ex_042_001_EF_CodeFirst_conventions;Integrated Security=SSPI;AttachDBFileName=|DataDirectory|\ex_042_001_EF_CodeFirst_conventions.mdf");
- optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_001_EF_CodeFirst_conventions.Nounours.mdf;Trusted_Connection=True;");
- }
- }
-}
diff --git a/ex_042_001_EF_CodeFirst_conventions/Program.cs b/ex_042_001_EF_CodeFirst_conventions/Program.cs
deleted file mode 100644
index 585f2df..0000000
--- a/ex_042_001_EF_CodeFirst_conventions/Program.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Program.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-using System.Linq;
-using static System.Console;
-
-namespace ex_042_001_EF_CodeFirst_conventions
-{
- ///
- /// Ce premier exemple utilisant l'approche CodeFirst avec EntityFramework montre comment vous pouvez créer simplement
- /// une base à partir de vos classes métier, en profitant des conventions de nommage d'Entity Framework.
- ///
- /// Contrairement à EntityFramework 6 dans le .NET framework 4.6, il y a un "petit peu" plus de travail à fournir, mais pas des masses... :)
- /// Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,
- /// - dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),
- /// - dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_001_EF_CodeFirst_conventions)
- /// - tapez : dotnet restore (pour restaurer les packages .NET Core)
- /// - tapez : dotnet ef migrations add MyFirstMigration
- /// note : vous pourrez détruire le dossier Migrations une fois la base créée
- /// - tapez : dotnet ef database update
- /// Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.
- /// Dans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf
- ///
- /// Nous allons nous attarder sur la classe Nounours et NounoursDBEntities.
- /// 1/ Nounours -> voir commentaires dans la classe Nounours
- /// 2/ NounoursDBEntities -> voir commentaires dans la classe NounoursDBEntities
- ///
- /// Ensuite, nous pouvons donc instancier NounoursDBEntities (à l'aide d'un bloc using car il s'agit d'une ressource non managée).
- /// Celle-ci donne accès à la DbSet à laquelle nous rajoutons 3 Nounours.
- /// Mais avant cela, nous vérifions qu'ils n'existent pas déjà en base, et si c'est le cas, nous les détruisons.
- ///
- /// Ces modifications sont persistées dans la base lors de l'appel à SaveChanges.
- ///
- ///
- /// Pour visualiser les résultats, vous pouvez :
- /// - aller dans Affichage -> Explorateur d'objets SQL Server
- /// - dans cet explorateur, SQL Server -> (localdb)\MSSQLLocalDB... -> Bases de données
- /// -> ex_042_001_EF_CodeFirst_conventions -> Tables -> dbo.Nounours
- /// en cliquant sur dbo.Nounours vous pourrez voir la table
- /// avec un clic droit -> "Afficher les données" sur dbo.Nounours vous pourrez voir les données dans la table
- ///
- ///
- class Program
- {
- static void Main(string[] args)
- {
- OutputEncoding = System.Text.Encoding.UTF8;
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
- Nounours trixi = new Nounours { Nom = "Trixi", DateDeNaissance = new DateTime(2015, 8, 15), NbPoils = 0 };
- Nounours Roudoudou = new Nounours { Nom = "Roudoudou", DateDeNaissance = new DateTime(2015, 8, 14), NbPoils = 2000 };
-
- try
- {
- using (NounoursDBEntities db = new NounoursDBEntities())
- {
- if (db.NounoursSet.Count() > 0)
- {
- WriteLine("La base n'est pas vide !");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- WriteLine("début du nettoyage...");
- }
- foreach (var n in db.NounoursSet.ToArray())
- {
- WriteLine($"Suppression de {n}");
- db.NounoursSet.Remove(n);
- }
-
- WriteLine("Base avant sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- db.SaveChanges();
- WriteLine("Base après sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- db.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok, trixi, Roudoudou });
-
- db.SaveChanges();
- WriteLine("Base après ajout des 3 nounours et sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- }
- }
- catch (Exception)
- {
- WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
- WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
- WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
- WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
- WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_001_EF_CodeFirst_conventions)");
- WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
- WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
- WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
- WriteLine("- tapez : dotnet ef database update");
- WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
- WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
- }
-
- ReadLine();
- }
- }
-}
diff --git a/ex_042_001_EF_CodeFirst_conventions/ex_042_001_EF_CodeFirst_conventions.csproj b/ex_042_001_EF_CodeFirst_conventions/ex_042_001_EF_CodeFirst_conventions.csproj
deleted file mode 100644
index 514202f..0000000
--- a/ex_042_001_EF_CodeFirst_conventions/ex_042_001_EF_CodeFirst_conventions.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- netcoreapp3.0
- ex_042_001_EF_CodeFirst_conventions
- Exe
- ex_042_001_EF_CodeFirst_conventions
- 3.0.1
- false
- false
- false
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
diff --git a/ex_042_002_EF_CodeFirst_data_annotations/Nounours.cs b/ex_042_002_EF_CodeFirst_data_annotations/Nounours.cs
deleted file mode 100644
index 2aa8948..0000000
--- a/ex_042_002_EF_CodeFirst_data_annotations/Nounours.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Nounours.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace ex_042_002_EF_CodeFirst_data_annotations
-{
- ///
- /// Nounours est une classe POCO, i.e. Plain Old CLR Object.
- /// Nous avons vu dans l'exemple précédent comment utiliser les conventions d'écriture. Cette méthode est pratique mais ne nous laisse pas beaucoup
- /// de possibilités de modifier la table selon nos désirs.
- /// Cet exemple montre comment utiliser les data annotations. En voici quelques exemples principaux :
- /// - la classe utilise l'annotation [Table("TableNounours")] qui permet de modifier le nom de la table dans la base de données
- /// - la propriété DateDeNaissance a une annotation "Column" permettant de choisir un nom pour la colonne
- /// - la propriété Nom n'a pas d'annotation "Column", c'est donc la convention d'écriture qui s'applique pour le nom de la colonne => "Nom"
- /// - la propriété Nom a une annotation "Required" qui indique que le champ est obligatoire
- /// - la propriété Nom a une annotation MaxLength indiquant combien de caractères peut avoir le Nom au maximum dans la base de données
- /// - la propriété NbPoils a une annotation NotMapped indiquant qu'il n'y aura pas de colonne associée à cette propriété dans la table
- /// - la propriété UniqueId a une annotation Key pour indiquer que c'est cette propriété qu'il faut utiliser comme clé primaire
- /// - la propriété UniqueId a également une annotation DatabaseGenerated permettant d'indiquer que c'est lors de l'insertion dans la table qu'une
- /// clé primaire (ici de type Guid, et pas obligatoirement int) lui sera attribuée
- ///
- /// Il existe d'autres annotations que vous pouvez découvrir et utiliser par la suite comme ForeignKey, TimeStamp, ConcurrencyCheck, CreditCard,
- /// EmailAddress, Phone, StringLength, Url...
- ///
- [Table("TableNounours")]
- public class Nounours
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public Guid UniqueId
- {
- get; set;
- }
-
- [Required]
- [MaxLength(256)]
- public string Nom
- {
- get;
- set;
- }
-
- [Column("Naissance")]
- public DateTime DateDeNaissance
- {
- get;
- set;
- }
-
- [NotMapped]
- public int NbPoils
- {
- get;
- set;
- }
-
- ///
- /// returns a hash code in order to use this class in hash table
- ///
- /// hash code
- public override int GetHashCode()
- {
- return Nom.GetHashCode();
- }
-
- ///
- /// checks if the "right" object is equal to this Nounours or not
- ///
- /// the other object to be compared with this Nounours
- /// true if equals, false if not
- public override bool Equals(object right)
- {
- //check null
- if (object.ReferenceEquals(right, null))
- {
- return false;
- }
-
- if (object.ReferenceEquals(this, right))
- {
- return true;
- }
-
- if (this.GetType() != right.GetType())
- {
- return false;
- }
-
- return this.Equals(right as Nounours);
- }
-
- ///
- /// checks if this Nounours is equal to the other Nounours
- ///
- /// the other Nounours to be compared with
- /// true if equals
- public bool Equals(Nounours other)
- {
- return (this.Nom.Equals(other.Nom) && this.DateDeNaissance == other.DateDeNaissance);
- }
-
- public override string ToString()
- {
- return $"{UniqueId}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
- }
-
- }
-}
diff --git a/ex_042_002_EF_CodeFirst_data_annotations/NounoursDBEntities.cs b/ex_042_002_EF_CodeFirst_data_annotations/NounoursDBEntities.cs
deleted file mode 100644
index 3c1bfac..0000000
--- a/ex_042_002_EF_CodeFirst_data_annotations/NounoursDBEntities.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : NounoursDBEntities.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-12
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-
-namespace ex_042_002_EF_CodeFirst_data_annotations
-{
- ///
- /// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
- /// Cette classe contient un DbSet pour permettre de réaliser des opérations CRUD sur le type T, ici Nounours.
- ///
- /// Lorsque nous utiliserons cette classe, le programme cherchera la chaîne de connection (connectionString) avec le même nom que celui passé
- /// dans le constructeur de DbContext (ici NounoursDBContext). Il cherche la connectionString à différents endroits et en particulier ici
- /// dans App.config.
- /// Si cette table n'existe pas, il va la créer automatiquement. Ceci est configurable et sera présenté dans les exemples suivants.
- ///
- class NounoursDBEntities : DbContext
- {
- public virtual DbSet NounoursSet { get; set; }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_002_EF_CodeFirst_data_annotations.Nounours.mdf;Trusted_Connection=True;");
- }
- }
-}
diff --git a/ex_042_002_EF_CodeFirst_data_annotations/Program.cs b/ex_042_002_EF_CodeFirst_data_annotations/Program.cs
deleted file mode 100644
index 6d9613c..0000000
--- a/ex_042_002_EF_CodeFirst_data_annotations/Program.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Program.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-using static System.Console;
-using System.Linq;
-
-namespace ex_042_002_EF_CodeFirst_data_annotations
-{
- ///
- /// Ce deuxième exemple utilisant l'approche CodeFirst avec EntityFramework montre comment vous pouvez créer simplement
- /// une base à partir de vos classes métier, en profitant des data annotations d'Entity Framework.
- ///
- /// Seule la classe Nounours est différente. Tout le reste de l'exemple est le même que le précédent.
- ///
- /// Contrairement à EntityFramework 6 dans le .NET framework 4.6, il y a un "petit peu" plus de travail à fournir, mais pas des masses... :)
- /// Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,
- /// - dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),
- /// - dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_001_EF_CodeFirst_conventions)
- /// - tapez : dotnet restore (pour restaurer les packages .NET Core)
- /// - tapez : dotnet ef migrations add MyFirstMigration
- /// note : vous pourrez détruire le dossier Migrations une fois la base créée
- /// - tapez : dotnet ef database update
- /// Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.
- /// Dans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf
- ///
- ///
- /// Nous allons nous attarder sur la classe Nounours et NounoursDBEntities.
- /// 1/ Nounours -> voir commentaires dans la classe Nounours
- /// 2/ NounoursDBEntities -> voir commentaires dans la classe NounoursDBEntities
- ///
- /// Ensuite, nous pouvons donc instancier NounoursDBEntities (à l'aide d'un bloc using car il s'agit d'une ressource non managée).
- /// Celle-ci donne accès à la DbSet à laquelle nous rajoutons 3 Nounours.
- ///
- /// Ces modifications sont persistées dans la base lors de l'appel à SaveChanges.
- ///
- /// Pour visualiser les résultats, vous pouvez :
- /// - aller dans Affichage -> Explorateur d'objets SQL Server
- /// - dans cet explorateur, SQL Server -> (localdb)\MSSQLLocalDB... -> Bases de données
- /// -> ex_042_002_EF_CodeFirst_data_annotations -> Tables -> dbo.TableNounours
- /// en cliquant sur dbo.TableNounours vous pourrez voir la table
- /// avec un clic droit -> "Afficher les données" sur dbo.Nounours vous pourrez voir les données dans la table
- ///
- class Program
- {
- static void Main(string[] args)
- {
- OutputEncoding = System.Text.Encoding.UTF8;
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
- Nounours trixi = new Nounours { Nom = "Trixi", DateDeNaissance = new DateTime(2015, 8, 15), NbPoils = 0 };
- Nounours Roudoudou = new Nounours { Nom = "Roudoudou", DateDeNaissance = new DateTime(2015, 8, 14), NbPoils = 2000 };
-
- try
- {
- using (NounoursDBEntities db = new NounoursDBEntities())
- {
- if (db.NounoursSet.Count() > 0)
- {
- WriteLine("La base n'est pas vide !");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- WriteLine("début du nettoyage...");
- }
- foreach (var n in db.NounoursSet.ToArray())
- {
- WriteLine($"Suppression de {n}");
- db.NounoursSet.Remove(n);
- }
-
- WriteLine("Base avant sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- db.SaveChanges();
- WriteLine("Base après sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- db.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok, trixi, Roudoudou });
-
- db.SaveChanges();
- WriteLine("Base après ajout des 3 nounours et sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- }
- }
- catch (Exception)
- {
- WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
- WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
- WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
- WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
- WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_002_EF_CodeFirst_data_annotations)");
- WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
- WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
- WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
- WriteLine("- tapez : dotnet ef database update");
- WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
- WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
- }
-
- ReadLine();
- }
- }
-}
diff --git a/ex_042_002_EF_CodeFirst_data_annotations/ex_042_002_EF_CodeFirst_data_annotations.csproj b/ex_042_002_EF_CodeFirst_data_annotations/ex_042_002_EF_CodeFirst_data_annotations.csproj
deleted file mode 100644
index 42b36bc..0000000
--- a/ex_042_002_EF_CodeFirst_data_annotations/ex_042_002_EF_CodeFirst_data_annotations.csproj
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
- netcoreapp3.0
- ex_042_002_EF_CodeFirst_data_annotations
- Exe
- ex_042_002_EF_CodeFirst_data_annotations
- 3.0.1
- false
- false
- false
-
-
-
-
- All
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
diff --git a/ex_042_003_EF_CodeFirst_Fluent_API/Nounours.cs b/ex_042_003_EF_CodeFirst_Fluent_API/Nounours.cs
deleted file mode 100644
index f42c166..0000000
--- a/ex_042_003_EF_CodeFirst_Fluent_API/Nounours.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Nounours.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-
-namespace ex_042_003_EF_CodeFirst_Fluent_API
-{
- ///
- /// Nounours est une classe POCO, i.e. Plain Old CLR Object.
- /// Elle contient 4 propriétés en lecture/écriture : Nom, DateDeNaissance, NbPoils et UniqueId.
- /// Entity Framework va utiliser la classe POCO Nounours pour créer une table dans la base de données, lorsque le DbSet va être créé (nous verrons ça dans la classe NounoursDBEntities).
- ///
- /// Dans cet exemple, nous n'utilisons pas les annotations de données (data annotations) et nous n'utiliserons pas non plus implicitement les conventions d'écriture
- /// d'Entity Framework car nous allons les réécrire dans la classe NounoursDBEntities.
- ///
- public class Nounours
- {
- public Guid UniqueId
- {
- get; set;
- }
-
- public string Nom
- {
- get;
- set;
- }
-
- public DateTime DateDeNaissance
- {
- get;
- set;
- }
-
- public int NbPoils
- {
- get;
- set;
- }
-
- ///
- /// returns a hash code in order to use this class in hash table
- ///
- /// hash code
- public override int GetHashCode()
- {
- return Nom.GetHashCode();
- }
-
- ///
- /// checks if the "right" object is equal to this Nounours or not
- ///
- /// the other object to be compared with this Nounours
- /// true if equals, false if not
- public override bool Equals(object right)
- {
- //check null
- if (object.ReferenceEquals(right, null))
- {
- return false;
- }
-
- if (object.ReferenceEquals(this, right))
- {
- return true;
- }
-
- if (this.GetType() != right.GetType())
- {
- return false;
- }
-
- return this.Equals(right as Nounours);
- }
-
- ///
- /// checks if this Nounours is equal to the other Nounours
- ///
- /// the other Nounours to be compared with
- /// true if equals
- public bool Equals(Nounours other)
- {
- return (this.Nom.Equals(other.Nom) && this.DateDeNaissance == other.DateDeNaissance);
- }
-
- public override string ToString()
- {
- return $"{UniqueId}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
- }
-
- }
-}
diff --git a/ex_042_003_EF_CodeFirst_Fluent_API/NounoursDBEntities.cs b/ex_042_003_EF_CodeFirst_Fluent_API/NounoursDBEntities.cs
deleted file mode 100644
index 9a4c552..0000000
--- a/ex_042_003_EF_CodeFirst_Fluent_API/NounoursDBEntities.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : NounoursDBEntities.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-12
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-
-namespace ex_042_003_EF_CodeFirst_Fluent_API
-{
- ///
- /// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
- /// Cette classe contient un DbSet pour permettre de réaliser des opérations CRUD sur le type T, ici Nounours.
- ///
- /// Lorsque nous utiliserons cette classe, le programme cherchera la chaîne de connection (connectionString) avec le même nom que celui passé
- /// dans le constructeur de DbContext (ici NounoursDBContext). Il cherche la connectionString à différents endroits et en particulier ici
- /// dans App.config.
- /// Si cette table n'existe pas, il va la créer automatiquement. Ceci est configurable et sera présenté dans les exemples suivants.
- ///
- /// Contrairement aux 2 exemples précédents, nous n'utilisons pas les conventions d'écriture, ni les annotations de données pour utiliser créer la table
- /// à partir de la classe Nounours. Nous allons cette fois-ci utiliser la Fluent API et réécrire dans la classe NounoursDBEntities dérivant de DbContext
- /// de quelle manière créer la table à partir de la classe Nounours.
- ///
- /// Cette méthode est préférable dans les deux cas principaux suivants (et en particulier le 1er) :
- /// - nous n'avons pas accès au code source de la classe Nounours ou bien nous n'avons pas le droit de le modifier, et les conventions d'écriture ne
- /// correspondent pas à ce que nous souhaitons réaliser.
- /// - nous ne souhaitons pas "polluer" la classe POCO avec des annotations de données.
- ///
- /// L'inconvénient majeur et évident de cette méthode est que la lecture et la maintenance sont plus compliquées.
- ///
- /// Pour utiliser la Fluent API et décrire de quelle manière créer la table à partir de la classe POCO, il faut réécrire la méthode virtuelle OnModelCreating
- /// (cf. commentaires de la méthode ci-dessous).
- ///
- /// L'exemple ci-dessous recrée exactement la même table que dans l'exemple précédent.
- ///
- class NounoursDBEntities : DbContext
- {
- public virtual DbSet NounoursSet { get; set; }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_003_EF_CodeFirst_Fluent_API.Nounours.mdf;Trusted_Connection=True;");
- }
-
- ///
- /// méthode appelée lors de la création du modèle.
- ///
- ///
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- //ici on précise comment s'appellera la table associée à la classe POCO Nounours
- //équivalent du [Table("TableNounours")] avec les annotations de données
- modelBuilder.Entity().ToTable("TableNounours");
-
- //ici on précise que la propriété UniqueId de Nounours est la clef primaire
- //équivalent de [Key] devant la propriété UniqueId dans Nounours
- modelBuilder.Entity().HasKey(n => n.UniqueId);
-
- //ici on explique que c'est lors de l'insertion en base que la clef primaire sera générée
- //équivalent de [DatabaseGenerated(DatabaseGeneratedOption.Identity)] devant la propriété UniqueId de Nounours
- modelBuilder.Entity().Property(n => n.UniqueId).ValueGeneratedOnAdd();
- //HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
-
- //ici on précise que la propriété Nom est obligatoire et que sa taille maximale est de 256 caractères
- //Notez l'utilisation des méthodes chaînées ! Trop beau ! Tellement pratique, intuitif et évident...
- //équivalent de [Required] et [MaxLength(256)] devant la propriété Nom de Nounours
- modelBuilder.Entity().Property(n => n.Nom).IsRequired()
- .HasMaxLength(256);
-
- //ici on donne un nom à la colonne associée à la propriété DateDeNaissance
- //équivalent de [Column("Naissance")] devant la propriété DateDeNaissance de Nounours
- modelBuilder.Entity().Property(n => n.DateDeNaissance).HasColumnName("Naissance");
-
- //ici on précise que la propriété NbPoils ne sera pas insérée en base
- //équivalent de [NotMapped] devant la propriété NbPoils de Nounours
- modelBuilder.Entity().Ignore(n => n.NbPoils);
-
- base.OnModelCreating(modelBuilder);
- }
- }
-}
diff --git a/ex_042_003_EF_CodeFirst_Fluent_API/Program.cs b/ex_042_003_EF_CodeFirst_Fluent_API/Program.cs
deleted file mode 100644
index c4556aa..0000000
--- a/ex_042_003_EF_CodeFirst_Fluent_API/Program.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Program.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-16
-//
-// ========================================================================
-
-using System;
-using static System.Console;
-using System.Linq;
-
-namespace ex_042_003_EF_CodeFirst_Fluent_API
-{
- ///
- /// Ce troisième exemple utilisant l'approche CodeFirst avec EntityFramework montre comment vous pouvez créer simplement
- /// une base à partir de vos classes métier, en profitant de l'API Fluent d'Entity Framework.
- ///
- /// Ici, nous n'expliquerons pas comment utiliser la chaîne de connection ; référez-vous aux exemples suivants pour plus d'informations.
- /// Elle est définie dans le fichier App.config avec le nom NounoursDBContext.
- ///
- /// Nous allons nous attarder sur la classe Nounours et NounoursDBEntities.
- /// 1/ Nounours -> voir commentaires dans la classe Nounours
- /// 2/ NounoursDBEntities -> voir commentaires dans la classe NounoursDBEntities
- /// C'est cette classe NounoursDBEntities qui explique comment traduire Nounours en Table.
- ///
- /// Ensuite, nous pouvons donc instancier NounoursDBEntities (à l'aide d'un bloc using car il s'agit d'une ressource non managée).
- /// Celle-ci donne accès à la DbSet à laquelle nous rajoutons 3 Nounours.
- ///
- /// Ces modifications sont persistées dans la base lors de l'appel à SaveChanges.
- ///
- /// Pour visualiser les résultats, vous pouvez :
- /// - aller dans Affichage -> Explorateur d'objets SQL Server
- /// - dans cet explorateur, SQL Server -> (localdb)\MSSQLLocalDB... -> Bases de données
- /// -> ex_042_003_EF_CodeFirst_Fluent_API -> Tables -> dbo.TableNounours
- /// en cliquant sur dbo.TableNounours vous pourrez voir la table
- /// avec un clic droit -> "Afficher les données" sur dbo.Nounours vous pourrez voir les données dans la table
- ///
- /// Si vous exécutez une deuxième fois le projet après avoir modifié la classe Nounours, celui-ci ne marchera pas
- /// car la table créée n'aura plus les bonnes caractéristiques correspondant à la classe Nounours.
- /// Vous pouvez pour cela effacer la base, avec un clic droit sur ex_042_003_EF_CodeFirst_Fluent_API -> Supprimer
- /// puis relancer le programme.
- ///
- class Program
- {
- static void Main(string[] args)
- {
- OutputEncoding = System.Text.Encoding.UTF8;
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
- Nounours trixi = new Nounours { Nom = "Trixi", DateDeNaissance = new DateTime(2015, 8, 15), NbPoils = 0 };
- Nounours Roudoudou = new Nounours { Nom = "Roudoudou", DateDeNaissance = new DateTime(2015, 8, 14), NbPoils = 2000 };
-
- try
- {
- using (NounoursDBEntities db = new NounoursDBEntities())
- {
- if (db.NounoursSet.Count() > 0)
- {
- WriteLine("La base n'est pas vide !");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- WriteLine("début du nettoyage...");
- }
- foreach (var n in db.NounoursSet.ToArray())
- {
- WriteLine($"Suppression de {n}");
- db.NounoursSet.Remove(n);
- }
-
- WriteLine("Base avant sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- db.SaveChanges();
- WriteLine("Base après sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- db.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok, trixi, Roudoudou });
-
- db.SaveChanges();
- WriteLine("Base après ajout des 3 nounours et sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- }
- }
- catch (Exception)
- {
- WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
- WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
- WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
- WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
- WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_003_EF_CodeFirst_Fluent_API)");
- WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
- WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
- WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
- WriteLine("- tapez : dotnet ef database update");
- WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
- WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
- }
-
- ReadLine();
- }
- }
-}
diff --git a/ex_042_003_EF_CodeFirst_Fluent_API/ex_042_003_EF_CodeFirst_Fluent_API.csproj b/ex_042_003_EF_CodeFirst_Fluent_API/ex_042_003_EF_CodeFirst_Fluent_API.csproj
deleted file mode 100644
index 81dcedf..0000000
--- a/ex_042_003_EF_CodeFirst_Fluent_API/ex_042_003_EF_CodeFirst_Fluent_API.csproj
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
- netcoreapp3.0
- ex_042_003_EF_CodeFirst_Fluent_API
- Exe
- ex_042_003_EF_CodeFirst_Fluent_API
- 3.0.1
- false
- false
- false
-
-
-
-
- All
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
diff --git a/ex_042_004_EF_CF_InitializationStrategy/DbContextInitializer.cs b/ex_042_004_EF_CF_InitializationStrategy/DbContextInitializer.cs
deleted file mode 100644
index e3bda6c..0000000
--- a/ex_042_004_EF_CF_InitializationStrategy/DbContextInitializer.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : DbContextInitializer.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-using System;
-
-namespace ex_042_004_EF_CF_InitializationStrategy
-{
- ///
- /// initialiseur de stratégies...
- ///
- public static class DbContextInitializer
- {
- ///
- /// les différentes stratégies de création de la base
- ///
- public enum InitializationStrategies
- {
- CreateDatabaseIfNotExists,
- DropCreateDatabaseIfModelChanges,
- DropCreateDatabaseAlways
- }
- public static void SetInitializer(DbContext context, InitializationStrategies strategy)
- {
- switch(strategy)
- {
- //par défaut : crée la base seulement si elle n'existe pas
- default:
- case InitializationStrategies.CreateDatabaseIfNotExists:
- context.Database.EnsureCreated();
- break;
-
- //recrée la base même si elle existe déjà
- case InitializationStrategies.DropCreateDatabaseAlways:
- context.Database.EnsureDeleted();
- context.Database.EnsureCreated();
- break;
-
- //recrée la base seulement si le modèle change : impossible aujourd'hui en Entity Framework Core...
- case InitializationStrategies.DropCreateDatabaseIfModelChanges:
- throw new NotImplementedException("Le mode DropCreateDatabaseIfModelChanges ne peut pas encore exister sous Entity Framework Core");
- }
- }
- }
-}
diff --git a/ex_042_004_EF_CF_InitializationStrategy/Nounours.cs b/ex_042_004_EF_CF_InitializationStrategy/Nounours.cs
deleted file mode 100644
index 8cc0854..0000000
--- a/ex_042_004_EF_CF_InitializationStrategy/Nounours.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Nounours.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace ex_042_004_EF_CF_InitializationStrategy
-{
- ///
- /// Nounours est une classe POCO, i.e. Plain Old CLR Object.
- ///
- [Table("TableNounours")]
- public class Nounours
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public Guid UniqueId
- {
- get; set;
- }
-
- [Required]
- [MaxLength(256)]
- public string Nom
- {
- get;
- set;
- }
-
- [Column("Naissance")]
- public DateTime DateDeNaissance
- {
- get;
- set;
- }
-
- [NotMapped]
- public int NbPoils
- {
- get;
- set;
- }
-
- ///
- /// returns a hash code in order to use this class in hash table
- ///
- /// hash code
- public override int GetHashCode()
- {
- return Nom.GetHashCode();
- }
-
- ///
- /// checks if the "right" object is equal to this Nounours or not
- ///
- /// the other object to be compared with this Nounours
- /// true if equals, false if not
- public override bool Equals(object right)
- {
- //check null
- if (object.ReferenceEquals(right, null))
- {
- return false;
- }
-
- if (object.ReferenceEquals(this, right))
- {
- return true;
- }
-
- if (this.GetType() != right.GetType())
- {
- return false;
- }
-
- return this.Equals(right as Nounours);
- }
-
- ///
- /// checks if this Nounours is equal to the other Nounours
- ///
- /// the other Nounours to be compared with
- /// true if equals
- public bool Equals(Nounours other)
- {
- return (this.Nom.Equals(other.Nom) && this.DateDeNaissance == other.DateDeNaissance);
- }
-
- public override string ToString()
- {
- return $"{UniqueId}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
- }
-
- }
-}
diff --git a/ex_042_004_EF_CF_InitializationStrategy/NounoursDBEntities.cs b/ex_042_004_EF_CF_InitializationStrategy/NounoursDBEntities.cs
deleted file mode 100644
index 50689f5..0000000
--- a/ex_042_004_EF_CF_InitializationStrategy/NounoursDBEntities.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : NounoursDBEntities.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-
-namespace ex_042_004_EF_CF_InitializationStrategy
-{
- ///
- /// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
- /// Cette classe contient un DbSet pour permettre de réaliser des opérations CRUD sur le type T, ici Nounours.
- ///
- class NounoursDBEntities : DbContext
- {
- public virtual DbSet NounoursSet { get; set; }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_004_EF_CF_InitializationStrategy.Nounours.mdf;Trusted_Connection=True;");
- }
- }
-}
diff --git a/ex_042_004_EF_CF_InitializationStrategy/Program.cs b/ex_042_004_EF_CF_InitializationStrategy/Program.cs
deleted file mode 100644
index a204ae0..0000000
--- a/ex_042_004_EF_CF_InitializationStrategy/Program.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Program.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using System;
-using static System.Console;
-using System.Linq;
-
-namespace ex_042_004_EF_CF_InitializationStrategy
-{
- ///
- /// Cet exemple présente les différentes stratégies d'initialisation de la base de données.
- ///
- /// Dans Entity Framework 6 pour .NET Framework (cf. ex_042_004 des exemples .NET Framework), il existe des stratégies d'initialisation.
- /// Il n'y a malheureusement pas d'équivalent pour Entity Framework Core.
- ///
- /// Cet exemple reprend le 042_002 tout en proposant une méthode permettant de modifier les stratégies d'initialisation.
- /// Pour cela, cet exemple propose l'écriture d'une classe statique DbContextInitializer, mais toutes les stratégies ne sont néanmoins pas reproductibles.
- ///
- class Program
- {
- static void Main(string[] args)
- {
- OutputEncoding = System.Text.Encoding.UTF8;
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
- Nounours trixi = new Nounours { Nom = "Trixi", DateDeNaissance = new DateTime(2015, 8, 15), NbPoils = 0 };
- Nounours Roudoudou = new Nounours { Nom = "Roudoudou", DateDeNaissance = new DateTime(2015, 8, 14), NbPoils = 2000 };
-
- try
- {
- using (NounoursDBEntities db = new NounoursDBEntities())
- {
- //choix de la stratégie
- DbContextInitializer.SetInitializer(db, DbContextInitializer.InitializationStrategies.CreateDatabaseIfNotExists);
- //DbContextInitializer.SetInitializer(db, DbContextInitializer.InitializationStrategies.DropCreateDatabaseAlways);
- //DbContextInitializer.SetInitializer(db, DbContextInitializer.InitializationStrategies.DropCreateDatabaseIfModelChanges);
-
- if (db.NounoursSet.Count() > 0)
- {
- WriteLine("La base n'est pas vide !");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- WriteLine("début du nettoyage...");
- }
- foreach (var n in db.NounoursSet.ToArray())
- {
- WriteLine($"Suppression de {n}");
- db.NounoursSet.Remove(n);
- }
-
- WriteLine("Base avant sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- db.SaveChanges();
- WriteLine("Base après sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- db.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok, trixi, Roudoudou });
-
- db.SaveChanges();
- WriteLine("Base après ajout des 3 nounours et sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- }
- }
- catch(NotImplementedException exception)
- {
- WriteLine(exception.Message);
- }
- catch (Exception)
- {
- WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
- WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
- WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
- WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
- WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_004_EF_CF_InitializationStrategy)");
- WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
- WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
- WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
- WriteLine("- tapez : dotnet ef database update");
- WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
- WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
- }
-
- ReadLine();
- }
- }
-}
diff --git a/ex_042_004_EF_CF_InitializationStrategy/ex_042_004_EF_CF_InitializationStrategy.csproj b/ex_042_004_EF_CF_InitializationStrategy/ex_042_004_EF_CF_InitializationStrategy.csproj
deleted file mode 100644
index a1c6c7e..0000000
--- a/ex_042_004_EF_CF_InitializationStrategy/ex_042_004_EF_CF_InitializationStrategy.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- netcoreapp3.0
- ex_042_004_EF_CF_InitializationStrategy
- Exe
- ex_042_004_EF_CF_InitializationStrategy
- 3.0.1
- false
- false
- false
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
diff --git a/ex_042_005_EF_CF_Seeding_Data/DbContextInitializer.cs b/ex_042_005_EF_CF_Seeding_Data/DbContextInitializer.cs
deleted file mode 100644
index 904e146..0000000
--- a/ex_042_005_EF_CF_Seeding_Data/DbContextInitializer.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : DbContextInitializer.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-using System;
-
-namespace ex_042_005_EF_CF_Seeding_Data
-{
- ///
- /// initialiseur de stratégies...
- ///
- public static class DbContextInitializer
- {
- ///
- /// remplissage de la base avec des données stubbées.
- ///
- /// base à remplir
- public static void Seed(NounoursDBEntities context)
- {
- SetInitializer(context, InitializationStrategies.DropCreateDatabaseAlways);
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
-
- context.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok });
-
- context.SaveChanges();
- }
-
- ///
- /// les différentes stratégies de création de la base
- ///
- public enum InitializationStrategies
- {
- CreateDatabaseIfNotExists,
- DropCreateDatabaseIfModelChanges,
- DropCreateDatabaseAlways
- }
- public static void SetInitializer(DbContext context, InitializationStrategies strategy)
- {
- switch(strategy)
- {
- //par défaut : crée la base seulement si elle n'existe pas
- default:
- case InitializationStrategies.CreateDatabaseIfNotExists:
- context.Database.EnsureCreated();
- break;
-
- //recrée la base même si elle existe déjà
- case InitializationStrategies.DropCreateDatabaseAlways:
- context.Database.EnsureDeleted();
- context.Database.EnsureCreated();
- break;
-
- //recrée la base seulement si le modèle change : impossible aujourd'hui en Entity Framework Core...
- case InitializationStrategies.DropCreateDatabaseIfModelChanges:
- throw new NotImplementedException("Le mode DropCreateDatabaseIfModelChanges ne peut pas encore exister sous Entity Framework Core");
- }
- }
- }
-}
diff --git a/ex_042_005_EF_CF_Seeding_Data/Nounours.cs b/ex_042_005_EF_CF_Seeding_Data/Nounours.cs
deleted file mode 100644
index dd46342..0000000
--- a/ex_042_005_EF_CF_Seeding_Data/Nounours.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Nounours.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace ex_042_005_EF_CF_Seeding_Data
-{
- ///
- /// Nounours est une classe POCO, i.e. Plain Old CLR Object.
- ///
- [Table("TableNounours")]
- public class Nounours
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public Guid UniqueId
- {
- get; set;
- }
-
- [Required]
- [MaxLength(256)]
- public string Nom
- {
- get;
- set;
- }
-
- [Column("Naissance")]
- public DateTime DateDeNaissance
- {
- get;
- set;
- }
-
- [NotMapped]
- public int NbPoils
- {
- get;
- set;
- }
-
- ///
- /// returns a hash code in order to use this class in hash table
- ///
- /// hash code
- public override int GetHashCode()
- {
- return Nom.GetHashCode();
- }
-
- ///
- /// checks if the "right" object is equal to this Nounours or not
- ///
- /// the other object to be compared with this Nounours
- /// true if equals, false if not
- public override bool Equals(object right)
- {
- //check null
- if (object.ReferenceEquals(right, null))
- {
- return false;
- }
-
- if (object.ReferenceEquals(this, right))
- {
- return true;
- }
-
- if (this.GetType() != right.GetType())
- {
- return false;
- }
-
- return this.Equals(right as Nounours);
- }
-
- ///
- /// checks if this Nounours is equal to the other Nounours
- ///
- /// the other Nounours to be compared with
- /// true if equals
- public bool Equals(Nounours other)
- {
- return (this.Nom.Equals(other.Nom) && this.DateDeNaissance == other.DateDeNaissance);
- }
-
- public override string ToString()
- {
- return $"{UniqueId}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
- }
-
- }
-}
diff --git a/ex_042_005_EF_CF_Seeding_Data/NounoursDBEntities.cs b/ex_042_005_EF_CF_Seeding_Data/NounoursDBEntities.cs
deleted file mode 100644
index 61deec0..0000000
--- a/ex_042_005_EF_CF_Seeding_Data/NounoursDBEntities.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : NounoursDBEntities.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using Microsoft.EntityFrameworkCore;
-
-namespace ex_042_005_EF_CF_Seeding_Data
-{
- ///
- /// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
- /// Cette classe contient un DbSet pour permettre de réaliser des opérations CRUD sur le type T, ici Nounours.
- ///
- public class NounoursDBEntities : DbContext
- {
- public virtual DbSet NounoursSet { get; set; }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_005_EF_CF_Seeding_Data.Nounours.mdf;Trusted_Connection=True;");
- }
- }
-}
diff --git a/ex_042_005_EF_CF_Seeding_Data/Program.cs b/ex_042_005_EF_CF_Seeding_Data/Program.cs
deleted file mode 100644
index 159da25..0000000
--- a/ex_042_005_EF_CF_Seeding_Data/Program.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-// ========================================================================
-//
-// Copyright (C) 2016-2017 MARC CHEVALDONNE
-// marc.chevaldonne.free.fr
-//
-// Module : Program.cs
-// Author : Marc Chevaldonné
-// Creation date : 2016-10-17
-//
-// ========================================================================
-
-using System;
-using static System.Console;
-using System.Linq;
-
-namespace ex_042_005_EF_CF_Seeding_Data
-{
- ///
- /// Cet exemple présente les différentes stratégies d'initialisation de la base de données.
- ///
- /// Dans Entity Framework 6 pour .NET Framework (cf. ex_042_004 des exemples .NET Framework), il existe des stratégies d'initialisation.
- /// Il n'y a malheureusement pas d'équivalent pour Entity Framework Core.
- ///
- /// Cet exemple reprend le 042_002 tout en proposant une méthode permettant de modifier les stratégies d'initialisation.
- /// Pour cela, cet exemple propose l'écriture d'une classe statique DbContextInitializer, mais toutes les stratégies ne sont néanmoins pas reproductibles.
- ///
- /// De plus, elle montre comment injecter des données stubbées pour permettre de rapidement tester la base.
- ///
- class Program
- {
- static void Main(string[] args)
- {
- OutputEncoding = System.Text.Encoding.UTF8;
-
- Nounours chewie = new Nounours { Nom = "Chewbacca", DateDeNaissance = new DateTime(1977, 5, 27), NbPoils = 1234567 };
- Nounours yoda = new Nounours { Nom = "Yoda", DateDeNaissance = new DateTime(1980, 5, 21), NbPoils = 3 };
- Nounours ewok = new Nounours { Nom = "Ewok", DateDeNaissance = new DateTime(1983, 5, 25), NbPoils = 3456789 };
- Nounours trixi = new Nounours { Nom = "Trixi", DateDeNaissance = new DateTime(2015, 8, 15), NbPoils = 0 };
- Nounours Roudoudou = new Nounours { Nom = "Roudoudou", DateDeNaissance = new DateTime(2015, 8, 14), NbPoils = 2000 };
-
- try
- {
- using (NounoursDBEntities db = new NounoursDBEntities())
- {
- //choix de la stratégie et remplissage avec des données stubbées
- DbContextInitializer.Seed(db);
-
- if (db.NounoursSet.Count() > 0)
- {
- WriteLine("La base n'est pas vide !");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- WriteLine("début du nettoyage...");
- }
- foreach (var n in db.NounoursSet.ToArray())
- {
- WriteLine($"Suppression de {n}");
- db.NounoursSet.Remove(n);
- }
-
- WriteLine("Base avant sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
- db.SaveChanges();
- WriteLine("Base après sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- db.NounoursSet.AddRange(new Nounours[] { chewie, yoda, ewok, trixi, Roudoudou });
-
- db.SaveChanges();
- WriteLine("Base après ajout des 3 nounours et sauvegarde des changements :");
- foreach (var n in db.NounoursSet)
- {
- WriteLine($"\t{n}");
- }
-
- }
- }
- catch (NotImplementedException exception)
- {
- WriteLine(exception.Message);
- }
- catch (Exception)
- {
- WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
- WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
- WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
- WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
- WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_005_EF_CF_Seeding_Data)");
- WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
- WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
- WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
- WriteLine("- tapez : dotnet ef database update");
- WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
- WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
- }
-
- ReadLine();
- }
- }
-}
diff --git a/ex_042_005_EF_CF_Seeding_Data/ex_042_005_EF_CF_Seeding_Data.csproj b/ex_042_005_EF_CF_Seeding_Data/ex_042_005_EF_CF_Seeding_Data.csproj
deleted file mode 100644
index ad96d71..0000000
--- a/ex_042_005_EF_CF_Seeding_Data/ex_042_005_EF_CF_Seeding_Data.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- netcoreapp3.0
- ex_042_005_EF_CF_Seeding_Data
- Exe
- ex_042_005_EF_CF_Seeding_Data
- 3.0.1
- false
- false
- false
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-