added ex_042_008_DataSeeding before EF 2.1

EFCore3_Reforged
Marc CHEVALDONNE 5 years ago
commit b2be83a446

@ -16,5 +16,7 @@ build:
#test:
# stage: test
# tags:
# - docker
# script:
# - dotnet test --no-restore

@ -570,6 +570,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03. Data Seeding", "03. Dat
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_042_008_DataSeeding_before_EF2.1", "p08_BDD_EntityFramework\ex_042_008_DataSeeding_before_EF2.1\ex_042_008_DataSeeding_before_EF2.1.csproj", "{26B0F58C-3373-4965-A00A-FB9F9AA2DFC5}"
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
{26B0F58C-3373-4965-A00A-FB9F9AA2DFC5}.Release|x64.Build.0 = Release|Any CPU
{26B0F58C-3373-4965-A00A-FB9F9AA2DFC5}.Release|x86.ActiveCfg = Release|Any CPU
{26B0F58C-3373-4965-A00A-FB9F9AA2DFC5}.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}
{26B0F58C-3373-4965-A00A-FB9F9AA2DFC5} = {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}

@ -1,4 +1,5 @@
using System;
using System.Runtime.InteropServices;
namespace ex_041_001_ConnectionStrings
{
@ -10,10 +11,32 @@ namespace ex_041_001_ConnectionStrings
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
using (var context = new SqlServerContext())
if(RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
using (var context = new SqlServerContext())
{
// Crée des nounours et les insère dans la base
Console.WriteLine("Creates and inserts new Nounours with SqlServer");
context.Add(chewie);
context.Add(yoda);
context.Add(ewok);
context.SaveChanges();
}
using (var context = new SqlServerContext())
{
foreach(var n in context.Nounours)
{
Console.WriteLine($"{n.Id} - {n.Nom}");
}
context.SaveChanges();
}
}
using (var context = new SQLiteContext())
{
// Crée des nounours et les insère dans la base
Console.WriteLine("Creates and inserts new Nounours");
Console.WriteLine("Creates and inserts new Nounours with SQLite");
context.Add(chewie);
context.Add(yoda);
context.Add(ewok);
@ -22,11 +45,10 @@ namespace ex_041_001_ConnectionStrings
using (var context = new SQLiteContext())
{
// 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);
foreach(var n in context.Nounours)
{
Console.WriteLine($"{n.Id} - {n.Nom}");
}
context.SaveChanges();
}
}

@ -1,5 +1,6 @@
# ex_041_001_ConnectionStrings
*31/12/2019 ⋅ Marc Chevaldonné*
*31/12/2019 ⋅ Marc Chevaldonné*
*Dernière mise à jour : 09/01/2020 ⋅ Marc Chevaldonné*
---
@ -42,7 +43,8 @@ C'est tout ce que cet exemple souhaite mettre en valeur : les chaînes de connex
## 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*.
* (__Windows__ Visual Studio 2019) : 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*.
* (__MacOSX__ Visual Studio 2019 For Mac) : ouvrez un Terminal.
* 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
@ -66,23 +68,45 @@ mais comme ici, nous sommes dans le cas particulier où nous avons deux contexte
dotnet ef migrations add ex_041_001_SqlServer --context SqlServerContext
dotnet ef migrations add ex_041_001_SQLite --context SQLiteContext
```
*Note : sous MacOSX, n'utilisez que SQLite, soit :*
```
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
```
*Note : sous MacOSX, n'utilisez que SQLite, soit :*
```
dotnet ef database update --context SQLiteContext
```
### Génération et exécution
Vous pouvez maintenant générer et exécuter l'exemple.
Le résultat de l'exécution peut donner :
* sur Windows :
```
Creates and inserts new Nounours with SqlServer
1 - Chewbacca
2 - Yoda
3 - Ewok
Creates and inserts new Nounours with SQLite
1 - Chewbacca
2 - Yoda
3 - Ewok
```
* sur MacOSX :
```
Creates and inserts new Nounours
Creates and inserts new Nounours
Creates and inserts new Nounours with SQLite
1 - Chewbacca
2 - Yoda
3 - Ewok
```
## Comment vérifier le contenu des bases de données SQL Server et SQLite ?
### SqlServer
### SqlServer (seulement sur Windows)
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*.
<img src="./readmefiles/sqlserver_01.png" width="500"/>
@ -106,7 +130,7 @@ Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'obj
Notez qu'il est également possible d'utiliser l'*Explorateur d'objets SQL Server* pour ajouter, modifier ou supprimer des données dans les tables.
### SQLite
### SQLite (Windows et MacOSX)
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*

@ -9,6 +9,6 @@
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -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");
}
}
}
}

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ex_041_004_TestingInMemory\ex_041_004_TestingInMemory.csproj" />
</ItemGroup>
</Project>

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

@ -1,5 +1,6 @@
# ex_041_004_TestingInMemory
*02/01/2020 &sdot; Marc Chevaldonné*
*02/01/2020 &sdot; Marc Chevaldonné*
*Dernière mise à jour : 09/01/2020 &sdot; 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<NounoursContext> 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*)

@ -6,6 +6,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -8,6 +8,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -7,6 +7,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

@ -8,6 +8,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0" />
</ItemGroup>
</Project>

Loading…
Cancel
Save