From 970900c706fc069c2e2cd7defe631e2eac83adbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Chevaldonn=C3=A9?= Date: Thu, 9 Jan 2020 23:23:14 +0100 Subject: [PATCH] updated sample ex_041_004 to make it work on MacOSX --- Exemples.sln | 23 ++++ .../20200109092359_ex_041_001.Designer.cs | 36 ------ .../Migrations/20200109092359_ex_041_001.cs | 29 ----- .../Migrations/SQLiteContextModelSnapshot.cs | 34 ----- .../Program.cs | 46 +++++++ .../ex_041_004_ConsoleTests_w_SQLite.csproj | 20 +++ .../Program.cs | 9 ++ .../ex_041_004_TestingInMemory/ReadMe.md | 121 +++++++++++++++++- .../ex_041_004_TestingInMemory.csproj | 2 +- .../ex_042_001_EF_CF_conventions.csproj | 2 +- .../ex_042_002_EF_CF_data_annotations.csproj | 2 +- .../ex_042_003_EF_CF_Fluent_API.csproj | 2 +- .../ex_042_004_Keys_conventions.csproj | 2 +- .../ex_042_005_Keys_data_annotations.csproj | 2 +- .../ex_042_006_Keys_FluentAPI.csproj | 2 +- .../ex_042_007_ValueGeneration.csproj | 2 +- .../ex_042_008_InitializationStrategy.csproj | 2 +- 17 files changed, 223 insertions(+), 113 deletions(-) delete mode 100644 p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.Designer.cs delete mode 100644 p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.cs delete mode 100644 p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/SQLiteContextModelSnapshot.cs create mode 100644 p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/Program.cs create mode 100644 p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/ex_041_004_ConsoleTests_w_SQLite.csproj diff --git a/Exemples.sln b/Exemples.sln index d9a49e8..4a88073 100644 --- a/Exemples.sln +++ b/Exemples.sln @@ -570,6 +570,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03. Initialization Strategy EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_042_008_InitializationStrategy", "p08_BDD_EntityFramework\ex_042_008_InitializationStrategy\ex_042_008_InitializationStrategy.csproj", "{3C9128AD-B677-460B-A1E1-D5B8B1491157}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_041_004_ConsoleTests_w_SQLite", "p08_BDD_EntityFramework\ex_041_004_ConsoleTests_w_SQLite\ex_041_004_ConsoleTests_w_SQLite.csproj", "{2249C4B0-563D-44C8-AAA5-C8366A8F509C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -4726,6 +4728,26 @@ Global {3C9128AD-B677-460B-A1E1-D5B8B1491157}.Release|x64.Build.0 = Release|Any CPU {3C9128AD-B677-460B-A1E1-D5B8B1491157}.Release|x86.ActiveCfg = Release|Any CPU {3C9128AD-B677-460B-A1E1-D5B8B1491157}.Release|x86.Build.0 = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|ARM.Build.0 = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|ARM64.Build.0 = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|x64.ActiveCfg = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|x64.Build.0 = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|x86.ActiveCfg = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Debug|x86.Build.0 = Debug|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|Any CPU.Build.0 = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|ARM.ActiveCfg = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|ARM.Build.0 = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|ARM64.ActiveCfg = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|ARM64.Build.0 = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|x64.ActiveCfg = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|x64.Build.0 = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|x86.ActiveCfg = Release|Any CPU + {2249C4B0-563D-44C8-AAA5-C8366A8F509C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -4996,6 +5018,7 @@ Global {DA7ADAF3-34FF-4B97-8306-EF490A7A713A} = {5B333C02-67B7-4A4C-AA58-2710C183292B} {78374D80-5BE7-425D-BE62-AD8F26491112} = {55E00151-58A6-4E7D-9457-0BB8213B82F5} {3C9128AD-B677-460B-A1E1-D5B8B1491157} = {78374D80-5BE7-425D-BE62-AD8F26491112} + {2249C4B0-563D-44C8-AAA5-C8366A8F509C} = {56C5A51B-16E9-4F93-9C32-8F91710391E8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E} diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.Designer.cs b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.Designer.cs deleted file mode 100644 index 8c389cd..0000000 --- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.Designer.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using ex_041_001_ConnectionStrings; - -namespace ex_041_001_ConnectionStrings.Migrations -{ - [DbContext(typeof(SQLiteContext))] - [Migration("20200109092359_ex_041_001")] - partial class ex_041_001 - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "3.1.0"); - - modelBuilder.Entity("ex_041_001_ConnectionStrings.Nounours", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Nom") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Nounours"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.cs b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.cs deleted file mode 100644 index 71a3d83..0000000 --- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/20200109092359_ex_041_001.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace ex_041_001_ConnectionStrings.Migrations -{ - public partial class ex_041_001 : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Nounours", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("Sqlite:Autoincrement", true), - Nom = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Nounours", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Nounours"); - } - } -} diff --git a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/SQLiteContextModelSnapshot.cs b/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/SQLiteContextModelSnapshot.cs deleted file mode 100644 index ceb4779..0000000 --- a/p08_BDD_EntityFramework/ex_041_001_ConnectionStrings/Migrations/SQLiteContextModelSnapshot.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using ex_041_001_ConnectionStrings; - -namespace ex_041_001_ConnectionStrings.Migrations -{ - [DbContext(typeof(SQLiteContext))] - partial class SQLiteContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "3.1.0"); - - modelBuilder.Entity("ex_041_001_ConnectionStrings.Nounours", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Nom") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Nounours"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/Program.cs b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/Program.cs new file mode 100644 index 0000000..9016c1a --- /dev/null +++ b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/Program.cs @@ -0,0 +1,46 @@ +using System; +using ex_041_004_TestingInMemory; +using Microsoft.EntityFrameworkCore; + +namespace ex_041_004_ConsoleTests_w_SQLite +{ + class Program + { + static void Main(string[] args) + { + Nounours chewie = new Nounours { Nom = "Chewbacca" }; + Nounours yoda = new Nounours { Nom = "Yoda" }; + Nounours ewok = new Nounours { Nom = "Ewok" }; + + using (var context = new SQLiteNounoursContext()) + { + // 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 SQLiteNounoursContext()) + { + foreach(var n in context.Nounours) + { + Console.WriteLine($"{n.Id} - {n.Nom}"); + } + context.SaveChanges(); + } + } + } + + public class SQLiteNounoursContext : NounoursContext + { + protected override void OnConfiguring(DbContextOptionsBuilder options) + { + if(!options.IsConfigured) + { + options.UseSqlite($"Data Source=ex_041_004_SQLite.Nounours.db"); + } + } + } +} diff --git a/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/ex_041_004_ConsoleTests_w_SQLite.csproj b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/ex_041_004_ConsoleTests_w_SQLite.csproj new file mode 100644 index 0000000..8c3448f --- /dev/null +++ b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SQLite/ex_041_004_ConsoleTests_w_SQLite.csproj @@ -0,0 +1,20 @@ + + + + Exe + netcoreapp3.0 + $(MSBuildProjectDirectory) + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + diff --git a/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SqlServer/Program.cs b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SqlServer/Program.cs index 395b034..73b50e2 100644 --- a/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SqlServer/Program.cs +++ b/p08_BDD_EntityFramework/ex_041_004_ConsoleTests_w_SqlServer/Program.cs @@ -20,6 +20,15 @@ namespace ex_041_004_ConsoleTests_w_SqlServer context.Add(ewok); context.SaveChanges(); } + + using (var context = new NounoursContext()) + { + foreach(var n in context.Nounours) + { + Console.WriteLine($"{n.Id} - {n.Nom}"); + } + context.SaveChanges(); + } } } } diff --git a/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ReadMe.md b/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ReadMe.md index 1346fa6..83ee4c4 100644 --- a/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ReadMe.md +++ b/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ReadMe.md @@ -1,5 +1,6 @@ # ex_041_004_TestingInMemory -*02/01/2020 ⋅ Marc Chevaldonné* +*02/01/2020 ⋅ Marc Chevaldonné* +*Dernière mise à jour : 09/01/2020 ⋅ Marc Chevaldonné* --- @@ -18,12 +19,14 @@ Pour le reste de l'exemple, celui-ci n'apporte rien de nouveau par rapport à l' Quatre projets constituent cet exemple : * **ex_041_004_TestingInMemory** est une bibliothèque de classes .NET Standard contentant le modèle, ie la classe ```Nounours``` et la classe ```NounoursContext``` -* **ex_041_004_ConsoleTests_w_SqlServer** est une application console .NET Core qui prouve le fonctionnement "normal" de la base de données (ie comme dans l'exemple ex_041_001) en exploitant la bibliothèque de classes **ex_041_004_TestingInMemory** +* **ex_041_004_ConsoleTests_w_SqlServer** est une application console .NET Core qui prouve le fonctionnement "normal" de la base de données (ie comme dans l'exemple ex_041_001) en exploitant la bibliothèque de classes **ex_041_004_TestingInMemory** (ne fonctionne que sur Windows) +* **ex_041_004_ConsoleTests_w_SQLite** est une application console .NET Core qui prouve le fonctionnement "normal" de la base de données (ie comme dans l'exemple ex_041_001) en exploitant la bibliothèque de classes **ex_041_004_TestingInMemory** (cross-platform) * **ex_041_004_UnitTests_w_InMemory** est une application de tests unitaires xUnit exploitant le fournisseur **InMemory** et la bibliothèque de classes **ex_041_004_TestingInMemory** * **ex_041_004_UnitTests_w_SQLiteInMemory** est une application de tests unitaires xUnit exploitant le fournisseur **SQLite in memory** et la bibliothèque de classes **ex_041_004_TestingInMemory** -Vous pouvez donc exécuter cet exemple de trois manières : -* via **ex_041_004_ConsoleTests_w_SqlServer** comme dans l'exemple ex_041_001 avec ```dotnet ef``` +Vous pouvez donc exécuter cet exemple de quatre manières : +* via **ex_041_004_ConsoleTests_w_SqlServer** comme dans l'exemple ex_041_001 avec ```dotnet ef``` (seulement sur Windows) +* via **ex_041_004_ConsoleTests_w_SQLite** comme dans l'exemple ex_041_001 avec ```dotnet ef``` * via les tests unitaires de **ex_041_004_UnitTests_w_InMemory** * via les tests unitaires de **ex_041_004_UnitTests_w_SQLiteInMemory** @@ -80,7 +83,7 @@ public NounoursContext(DbContextOptions options) ``` La classe ```NounoursContext``` peut donc s'utiliser comme précédemment, sans changement, et la base *SqlServer* sera utilisée ; ou alors, on pourra injecter un autre fournisseur. -### application console .NET Core ex_041_004_ConsoleTests_w_SqlServer +### application console .NET Core ex_041_004_ConsoleTests_w_SqlServer (seulement pour Windows) L'application console .NET Core **ex_041_004_ConsoleTests_w_SqlServer** fait référence à la bibliothèque .NET Standard précédente pour pouvoir consommer ```Nounours``` et ```NounoursContext```. Sa seule classe est donc ```Program``` et peut donc être codée de la manière suivante : @@ -107,6 +110,15 @@ namespace ex_041_004_ConsoleTests_w_SqlServer context.Add(ewok); context.SaveChanges(); } + + using (var context = new NounoursContext()) + { + foreach(var n in context.Nounours) + { + Console.WriteLine($"{n.Id} - {n.Nom}"); + } + context.SaveChanges(); + } } } } @@ -140,6 +152,9 @@ Vous pouvez maintenant générer et exécuter l'exemple **ex_041_004_ConsoleTest * Le résultat de l'exécution doit ressembler à : ``` Creates and inserts new Nounours +1 - Chewbacca +2 - Yoda +3 - Ewok ``` * Comment vérifier le contenu des bases de données SQL Server ? Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server*. @@ -163,6 +178,102 @@ Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'obj |2|Yoda |3|Ewok +### application console .NET Core ex_041_004_ConsoleTests_w_SQLite + +L'application console .NET Core **ex_041_004_ConsoleTests_w_SQLite** fait référence à la bibliothèque .NET Standard précédente pour pouvoir consommer ```Nounours``` et ```SQLiteNounoursContext```. +Ses deux seules classes sont donc ```Program``` et ```SQLiteNounoursContext``` et sont codées de la manière suivante : +```csharp +using System; +using ex_041_004_TestingInMemory; +using Microsoft.EntityFrameworkCore; + +namespace ex_041_004_ConsoleTests_w_SQLite +{ + class Program + { + static void Main(string[] args) + { + Nounours chewie = new Nounours { Nom = "Chewbacca" }; + Nounours yoda = new Nounours { Nom = "Yoda" }; + Nounours ewok = new Nounours { Nom = "Ewok" }; + + using (var context = new SQLiteNounoursContext()) + { + // 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(); + } + } + } + + public class SQLiteNounoursContext : NounoursContext + { + protected override void OnConfiguring(DbContextOptionsBuilder options) + { + if(!options.IsConfigured) + { + options.UseSqlite($"Data Source=ex_041_004_SQLite.Nounours.db"); + } + } + } +} +``` +La classe ``SQLiteNounoursContext``` a pour but de permettre l'appel de ```dotnet ef``` sans avoir à utiliser le ```NounoursContext``` qui utilise SqlServer. En effet, pour pouvoir +mettre à jour la base SQLite, EFCore demande pour le moment, un ```DbContext``` correspondant à la base à mettre à jour dans la méthode ```OnConfiguring```. + +Pour tester cette application, n'oubliez pas les commandes comme présentées dans l'exemple ex_041_001 : 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*. +Ou bien ouvrez le terminal (sous MacOSX) + * Dans la console ou le terminal que vous venez d'ouvrir, déplacez-vous dans le dossier du projet .NET Core, ici : +``` +cd .\p08_BDD_EntityFramework\ex_041_004_ConsoleTests_w_SqlServer +``` + *Note*: + si vous n'avez pas installé correctement EntityFrameworkCore, il vous faudra peut-être utiliser également : + +* ```dotnet tool install --global dotnet-ef``` si vous utilisez la dernière version de .NET Core (3.1 aujourd'hui), + +* ```dotnet tool install --global dotnet-ef --version 3.0.0``` si vous vous utiliser spécifiquement .NET Core 3.0. + + + * Migration : comme la classe dérivant de ```DbContext``` se trouve dans l'application Console, nous n'avons pas à préciser dans quel projet elle se trouve. +``` +dotnet ef migrations add migration_ex_041_004 +``` + * Création de la table : +``` +dotnet ef database update +``` + * Génération et exécution +Vous pouvez maintenant générer et exécuter l'exemple **ex_041_004_ConsoleTests_w_SQLite**. + + * Le résultat de l'exécution doit ressembler à : + ``` +Creates and inserts new Nounours +1 - Chewbacca +2 - Yoda +3 - Ewok +``` + * Comment vérifier le contenu des bases de données SQLite ? +Pour vérifier le contenu de votre base SQLite, vous pouvez utiliser le programme *DB Browser* : +* Rendez-vous sur la page : https://sqlitebrowser.org/dl/ et téléchargez le programme *DB Browser*. +* Lancez *DB Browser for SQLite* +* Glissez-déposez au milieu de la fenêtre de *DB Browser for SQLite* le fichier *ex_041_004_ConsoleTests_w_SQLite.Nounours.db* qui a été généré par l'exécution du programme et qui se trouve près de *ex_041_004_ConsoleTests_w_SQLite.csproj*. +![DB Browser for SQLite](./readmefiles/dbbrowser_01.png) +* Choisissez l'onglet *Parcourir les données* +* Observez les résultats obtenus +![DB Browser for SQLite](./readmefiles/dbbrowser_02.png) + * Vous devriez maintenant pouvoir voir les données suivantes dans le tableau : + + |Id |Nom + |---|--- + |1|Chewbacca + |2|Yoda + |3|Ewok + ### Configuration des tests unitaires avec InMemory Le test unitaire est de type *xUnit* et va permettre d'injecter le fournisseur **InMemory**. * On crée un nouveau projet de tests unitaires (*xUnit*) diff --git a/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ex_041_004_TestingInMemory.csproj b/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ex_041_004_TestingInMemory.csproj index 065d1ee..1201013 100644 --- a/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ex_041_004_TestingInMemory.csproj +++ b/p08_BDD_EntityFramework/ex_041_004_TestingInMemory/ex_041_004_TestingInMemory.csproj @@ -6,6 +6,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_001_EF_CF_conventions/ex_042_001_EF_CF_conventions.csproj b/p08_BDD_EntityFramework/ex_042_001_EF_CF_conventions/ex_042_001_EF_CF_conventions.csproj index dc75d97..431c792 100644 --- a/p08_BDD_EntityFramework/ex_042_001_EF_CF_conventions/ex_042_001_EF_CF_conventions.csproj +++ b/p08_BDD_EntityFramework/ex_042_001_EF_CF_conventions/ex_042_001_EF_CF_conventions.csproj @@ -8,6 +8,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_002_EF_CF_data_annotations/ex_042_002_EF_CF_data_annotations.csproj b/p08_BDD_EntityFramework/ex_042_002_EF_CF_data_annotations/ex_042_002_EF_CF_data_annotations.csproj index ed528bb..d45f39b 100644 --- a/p08_BDD_EntityFramework/ex_042_002_EF_CF_data_annotations/ex_042_002_EF_CF_data_annotations.csproj +++ b/p08_BDD_EntityFramework/ex_042_002_EF_CF_data_annotations/ex_042_002_EF_CF_data_annotations.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_003_EF_CF_Fluent_API/ex_042_003_EF_CF_Fluent_API.csproj b/p08_BDD_EntityFramework/ex_042_003_EF_CF_Fluent_API/ex_042_003_EF_CF_Fluent_API.csproj index dc4bf52..7b54839 100644 --- a/p08_BDD_EntityFramework/ex_042_003_EF_CF_Fluent_API/ex_042_003_EF_CF_Fluent_API.csproj +++ b/p08_BDD_EntityFramework/ex_042_003_EF_CF_Fluent_API/ex_042_003_EF_CF_Fluent_API.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_004_Keys_conventions/ex_042_004_Keys_conventions.csproj b/p08_BDD_EntityFramework/ex_042_004_Keys_conventions/ex_042_004_Keys_conventions.csproj index dc4bf52..7b54839 100644 --- a/p08_BDD_EntityFramework/ex_042_004_Keys_conventions/ex_042_004_Keys_conventions.csproj +++ b/p08_BDD_EntityFramework/ex_042_004_Keys_conventions/ex_042_004_Keys_conventions.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_005_Keys_data_annotations/ex_042_005_Keys_data_annotations.csproj b/p08_BDD_EntityFramework/ex_042_005_Keys_data_annotations/ex_042_005_Keys_data_annotations.csproj index 7b1d557..8fe0f0a 100644 --- a/p08_BDD_EntityFramework/ex_042_005_Keys_data_annotations/ex_042_005_Keys_data_annotations.csproj +++ b/p08_BDD_EntityFramework/ex_042_005_Keys_data_annotations/ex_042_005_Keys_data_annotations.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_006_Keys_FluentAPI/ex_042_006_Keys_FluentAPI.csproj b/p08_BDD_EntityFramework/ex_042_006_Keys_FluentAPI/ex_042_006_Keys_FluentAPI.csproj index 7b1d557..8fe0f0a 100644 --- a/p08_BDD_EntityFramework/ex_042_006_Keys_FluentAPI/ex_042_006_Keys_FluentAPI.csproj +++ b/p08_BDD_EntityFramework/ex_042_006_Keys_FluentAPI/ex_042_006_Keys_FluentAPI.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_007_ValueGeneration/ex_042_007_ValueGeneration.csproj b/p08_BDD_EntityFramework/ex_042_007_ValueGeneration/ex_042_007_ValueGeneration.csproj index dc4bf52..7b54839 100644 --- a/p08_BDD_EntityFramework/ex_042_007_ValueGeneration/ex_042_007_ValueGeneration.csproj +++ b/p08_BDD_EntityFramework/ex_042_007_ValueGeneration/ex_042_007_ValueGeneration.csproj @@ -7,6 +7,6 @@ - + diff --git a/p08_BDD_EntityFramework/ex_042_008_InitializationStrategy/ex_042_008_InitializationStrategy.csproj b/p08_BDD_EntityFramework/ex_042_008_InitializationStrategy/ex_042_008_InitializationStrategy.csproj index dc4bf52..7b54839 100644 --- a/p08_BDD_EntityFramework/ex_042_008_InitializationStrategy/ex_042_008_InitializationStrategy.csproj +++ b/p08_BDD_EntityFramework/ex_042_008_InitializationStrategy/ex_042_008_InitializationStrategy.csproj @@ -7,6 +7,6 @@ - +