// ======================================================================== // // 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(); } } }