|
|
|
@ -0,0 +1,108 @@
|
|
|
|
|
// ========================================================================
|
|
|
|
|
//
|
|
|
|
|
// 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_008_InitializationStrategy
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 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.
|
|
|
|
|
/// </summary>
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|