diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Program.cs b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Program.cs
index 6587676..875fb65 100644
--- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Program.cs
+++ b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Program.cs
@@ -10,15 +10,15 @@ namespace ex_041_001_ConnectionStrings
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
- //using (var context = new SqlServerContext())
- //{
- // // Crée des nounours et les insère dans la base
- // Console.WriteLine("Creates and inserts new Nounours");
- // context.Add(chewie);
- // context.Add(yoda);
- // context.Add(ewok);
- // context.SaveChanges();
- //}
+ using (var context = new SqlServerContext())
+ {
+ // Crée des nounours et les insère dans la base
+ Console.WriteLine("Creates and inserts new Nounours");
+ context.Add(chewie);
+ context.Add(yoda);
+ context.Add(ewok);
+ context.SaveChanges();
+ }
using (var context = new SQLiteContext())
{
diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ReadMe.md b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ReadMe.md
index 246c9bf..59c8fd9 100644
--- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ReadMe.md
+++ b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ReadMe.md
@@ -1,17 +1,94 @@
# ex_041_001_ConnectionStrings
Cet exemple a pour but de présenter les chaîne de connexion (*connection strings*).
+* Les *connection strings* servent à se connecter à une base de données.
+* Elles diffèrent en fonction des *providers*
+* Parfois, elles nécessitent des informations telles que un nom d'utilisateur et un mot de passe qu'on peut vouloir cacher
-Servent à se connecter à une base de données
-diffèrent en fonction des providers
-parfois, elles nécessitent login/pwd_
+Dans cet exemple, j'ai voulu montrer deux *connection strings* : une pour SQL Server et une autre pour SQLite.
+## Configuration
+Il faut penser à ajouter les NuGet suivants :
+* Microsoft.EntityFrameworkCore : pour le projet en général
+* Microsoft.EntityFrameworkCore.SqlServer : pour le *provider* SQL Server
+* Microsoft.EntityFrameworkCore.Sqlite : pour le *provider* SQLite
+* Microsoft.EntityFrameworkCore.Tools : pour bénéficier des outils de Design, de migrations, etc.
+
+
+De plus, pour SQLite, il faut penser également à rajouter
dans l'exemple :
-2 providers
-pour sqlite, il faut rajouter les nugets, le chemin du starting working directory
+* le chemin du *starting working directory* : on peut le faire par exemple en modifiant le **.csproj** en ajoutant la ligne suivante :
+```xml
+$(MSBuildProjectDirectory)
+```
+
+## Comment fonctionne l'exemple ?
+Ce projet contient les classes suivantes :
+* ```Nounours``` : elle est la classe du modèle que j'ai faite la plus simple possible. J'expliquerai dans un exemple ultérieure son mode de fonctionnement. Elle contient un ```Id```et un ```Nom``` qui donneront deux colonnes dans une table Nounours avec les mêmes noms.
+* ```SqlServerContext``` : première classe qui dérive de ```DbContext``` et qui va permettre de réaliser la connexion avec la base de données de type MSSqlServer
+* ```SQLiteContext``` : deuxième classe qui dérive de ```DbContext```et qui va permettre de réaliser la connexion avec la base de données de type SQLite.
+
+Dans les deux classes qui dérivent de ```DbContext```, on doit donner une *connection string*. Celle-ci est donnée via la méthode protégée et virtuelle ```OnConfiguring```,
+via l'instance de ```DbContextOptionsBuilder```, à travers l'une des méthodes d'extension :
+* ```UseSqlServer``` : pour SqlServer, où on peut voir une *connection string* plus ou moins complexe indiquant qu'elle est en local (```Server=(localdb)\mssqllocaldb;```), ainsi que le nom de la base de données (```Database=ex_041_001_ConnectionStrings.Nounours.mdf;```)
+* ```UseSqlite``` : pour SQLite, où on peut voir le nom de la base de données ```Data Source=ex_041_001_ConnectionStrings.Nounours.db``` qui sera placée par défaut dans le dossier du projet si vous l'exécutez depuis Visual Studio.
+
+C'est tout ce que cet exemple souhaite mettre en valeur : les chaînes de connexion.
+
+## Comment générer et exécuter l'exemple ?
+Pour générer l'exemple, il vous faut d'abord préparer les migrations et les tables.
+
+* Ouvrez la *Console du Gestionnaire de package*, pour cela, dirigez-vous dans le menu *Outils*, puis *Gestionnaire de package NuGet*, puis *Console du Gestionnaire de package*.
+* Dans la console que vous venez d'ouvrir, déplacez-vous dans le dossier du projet, ici :
+```
+cd .\p08_BDD_EntityFramework\ex_041_001_ConnectionStrings
+```
+
+*Note*:
+si vous n'avez pas installé correctement EntityFrameworkCore, il vous faudra peut-être utiliser également :
+
+```dotnet tool install --global dotnet-ef```
+
+### Migrations
+*Note :* normalement, la commande pour effectuer une migration est :
+```
+dotnet ef migrations add monNomDeMigration
+```
+mais comme ici, nous sommes dans le cas particulier où nous avons deux contextes, nous devons préciser les noms des ```DbContext```à migrer :
+```
+dotnet ef migrations add ex_041_001_SqlServer --context SqlServerContext
+dotnet ef migrations add ex_041_001_SQLite --context SQLiteContext
+```
+### Création des tables
+Tapez ensuite les commandes suivantes :
+```
+dotnet ef database update --context SqlServerContext
+dotnet ef database update --context SQLiteContext
+```
+### Génération et exécution
+Vous pouvez maintenant générer et exécuter l'exemple.
+
+## Comment vérifier le contenu des bases de données SQL Server et SQLite ?
+### SqlServer
+Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server*.
+* Pour cela, allez dans le menu *Affichage* puis *Explorateur d'objets SQL Server*.
+* Déployez dans l'*Explorateur d'objets SQL Server* :
+ * *SQL Server*,
+ * puis *(localdb)\MSSQLLocalDB ...*,
+ * puis *Bases de données*
+ * puis celle portant le nom de votre migration, dans mon cas : *myFirstDatabase.Nounours.mdf*
+ * puis *Tables*
+ * Faites un clic droit sur la table *dbo.Nounours* puis choisissez *Afficher les données*
+ * Vous devriez maintenant pouvoir voir les données suivantes dans le tableau :
+
+ |Id |Nom |Naissance |NbPoils
+ |---|---|---|---
+ |1|Chewbacca|27/05/1977 00:00:00|1234567
+ |2|Yoda|21/05/1980 00:00:00|3
+ |3|Wicket|25/05/1983 00:00:00|3456789
+
+Notez qu'il est possible d'utiliser l'*Explorateur d'objets SQL Server* pour ajouter, modifier ou supprimer des données dans les tables.
+
+### SQLite
on peut observer le contenu avec DB browser : https://sqlitebrowser.org/dl/
-todo : faire fonctionner avec les deux providers
-préciser la différence pour les migrations
-dotnet ef migrations add ex_041_001_ConnectionStrings --context SQLiteContext
-dotnet ef database update --context SQLiteContext
\ No newline at end of file
diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/SQLiteContext.cs b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/SQLiteContext.cs
index 90399b3..a8fc417 100644
--- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/SQLiteContext.cs
+++ b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/SQLiteContext.cs
@@ -10,6 +10,6 @@ namespace ex_041_001_ConnectionStrings
public DbSet Nounours { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
- => options.UseSqlite($"Data Source=Nounours.db");
+ => options.UseSqlite($"Data Source=ex_041_001_ConnectionStrings.Nounours.db");
}
}
diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ex_041_001_ConnectionStrings.csproj b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ex_041_001_ConnectionStrings.csproj
index b512e4b..2fea5ab 100644
--- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ex_041_001_ConnectionStrings.csproj
+++ b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/ex_041_001_ConnectionStrings.csproj
@@ -9,11 +9,11 @@
-
-
+
+
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
+