added introduction to ef core samples

EFCore3_Reforged
Marc CHEVALDONNE 6 years ago
parent a07d07ca84
commit a7a14d37bb

@ -90,13 +90,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap039_LINQ_to_XML", "chap
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap040_LINQ_to_Json", "chap040_LINQ_to_Json", "{3BD95300-E2F6-4CA6-B4CC-5D19DF5C6AC0}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap040_LINQ_to_Json", "chap040_LINQ_to_Json", "{3BD95300-E2F6-4CA6-B4CC-5D19DF5C6AC0}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "p08_BDD", "p08_BDD", "{65DF0C9A-4F06-4361-8DD9-E8360B6325CA}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "p08_BDD_EntityFramework", "p08_BDD_EntityFramework", "{65DF0C9A-4F06-4361-8DD9-E8360B6325CA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap042_EntityFramework", "chap042_EntityFramework", "{ED951AD1-2EB1-49CC-9DBE-E3360E11525B}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
temp.md = temp.md p08_BDD_EntityFramework\EntityFramework.md = p08_BDD_EntityFramework\EntityFramework.md
p08_BDD_EntityFramework\temp.md = p08_BDD_EntityFramework\temp.md
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap042_EntityFramework", "chap042_EntityFramework", "{ED951AD1-2EB1-49CC-9DBE-E3360E11525B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01. EF CodeFirst approach", "01. EF CodeFirst approach", "{D2D113F6-9444-4F75-959F-8761054F1AEE}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01. EF CodeFirst approach", "01. EF CodeFirst approach", "{D2D113F6-9444-4F75-959F-8761054F1AEE}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02. Initialization Strategy and Seeding Data with CodeFirst", "02. Initialization Strategy and Seeding Data with CodeFirst", "{41B79FDB-6371-41E1-B9A3-73A9A209E906}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02. Initialization Strategy and Seeding Data with CodeFirst", "02. Initialization Strategy and Seeding Data with CodeFirst", "{41B79FDB-6371-41E1-B9A3-73A9A209E906}"
@ -536,6 +537,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_042_011_EF_CF_Many_to_Ma
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_042_012_EF_CF_Many_to_Many_procurators", "ex_042_012_EF_CF_Many_to_Many_procurators\ex_042_012_EF_CF_Many_to_Many_procurators.csproj", "{A14CDD6E-3E6E-4E7A-9277-3F00C0F658FD}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_042_012_EF_CF_Many_to_Many_procurators", "ex_042_012_EF_CF_Many_to_Many_procurators\ex_042_012_EF_CF_Many_to_Many_procurators.csproj", "{A14CDD6E-3E6E-4E7A-9277-3F00C0F658FD}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap041_EF_Fundamentals", "chap041_EF_Fundamentals", "{56C5A51B-16E9-4F93-9C32-8F91710391E8}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -4747,6 +4750,7 @@ Global
{BCE167F6-6323-46FC-A112-D9941A75815A} = {7FDA2D7D-5385-485D-B8B5-60727583D6ED} {BCE167F6-6323-46FC-A112-D9941A75815A} = {7FDA2D7D-5385-485D-B8B5-60727583D6ED}
{4F8FDCA9-D98C-4137-BD14-C255506209B0} = {593200F9-6D14-43BC-9289-8BB75FAC6552} {4F8FDCA9-D98C-4137-BD14-C255506209B0} = {593200F9-6D14-43BC-9289-8BB75FAC6552}
{A14CDD6E-3E6E-4E7A-9277-3F00C0F658FD} = {593200F9-6D14-43BC-9289-8BB75FAC6552} {A14CDD6E-3E6E-4E7A-9277-3F00C0F658FD} = {593200F9-6D14-43BC-9289-8BB75FAC6552}
{56C5A51B-16E9-4F93-9C32-8F91710391E8} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E} SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E}

@ -0,0 +1,60 @@
# Entity Framework Core 3.0
Entity Framework (EF) Core est un ORM (Object-Relational Mapper) qui permet aux développeurs .NET de gérer de manière simple, légère et extensible, des bases de données.
EF permet de gérer de nombreux *providers* (SQL Server, SQLite, Cosmos, ...) de manière transparente.
EF vous permet également de mettre à jour vos bases de données et d'exécuter des requêtes sans avoir à écrire la moindre requête SQL. Vous pouvez passer par LINQ to SQL qui apportera plus de lisibilité et permettra au compilateur de vous aider à détecter vos erreurs.
---
*Note:*
Différentes solutions existent avec EF pour gérer une base de données dont le modèle existe par exemple. Dans ces exemples, je ne traiterai que la partie *Code First*, c'est-à-dire le cas où le modèle est créé à partir de vos classes.
---
## Plan
Les exemples sont organisés selon le plan suivant:
1. *Fundamentals* :
Dans cette partie, je donnerai quelques notions pour se connecter à une base à l'aide de chaîne de connection (*connection strings*), comment utiliser des *providers de tests...*.
Il s'agira en conséquence d'exemples simples manquants d'explications sur certains points, car ils seront présentés plus tard.
2. *Model* :
Ce chapitre s'attardera sur le lien entre le modèle et la base de données. En effet, avec EF, l'accès aux données se fait via le modèle, c'est-à-dire l'ensemble de vos classes (qui seront reliées à des tables créées plus ou moins automatiquement)
ainsi qu'un contexte (```DbContext```) qui représentera une session de connexion avec votre (ou vos) base(s) de données.
Je présenterai en conséquence tout d'abord comment écrire des classes pour votre modèle, puis comment écrire les différentes relations classiques (aggrégation, *one to one*, *one to many*, *many to many*, mais aussi les dictionnaires), comment gérer les héritages entre classes du modèle dans la base de données, etc.
3. *Schemas and migrations* :
Le but de ce chapitre sera de vous montrer comment garder votre modèle et votre base de données synchronisés.
4. *Querying (LINQ to SQL) and saving data* :
*Language INtegrated Query* (LINQ) est un outil de requête sur collections et sa version LINQ to SQL vous permet de passer très facilement à un système de requêtes sur les bases de données.
Les requêtes LINQ sont automatiquement traduites en requêtes SQL, vous évitant ainsi d'avoir à écrire vos requêtes vous-mêmes. Elles sont dès lors beaucoup plus lisibles et faciles à écrire.
Ce chapitre présente comment charger des données, réaliser du filtrage, de manière synchrone ou asynchrone, etc.
Il montre bien sûr également comment réaliser le symétrique : mettre à jour, supprimer ou ajouter de nouvelles données dans la base.
5. *Database providers* :
EF vous permet de gérer votre base de données indépendamment du *provider*. Ce chapitre montrera donc comment utiliser différents providers parmi lesquels Microsoft SQL Server, SQLite ou encore InMemory dont le but est de permettre de tester la base en mémoire, sans passer par un *provider*.
---
## Quelle version utiliser ?
Ces exemples sont écrits pour .NET Core 3.0, mais vous pouvez utiliser EF Core avec différents types projets. Voici les recommendations actuelles de Microsoft quant à l'utilisation des version d'EF.
|**EF Core** |**1.x** |**2.x** |**3.x**
|----------------|--------|-----------|---------------
|.NET Standard |1.3 |2.0 |2.1
|.NET Core |1.0 |2.0 |3.0
|.NET Framework |4.5.1 |4.7.2 |(not supported)
|Mono |4.6 |5.4 |6.4
|Xamarin.iOS |10.0 |10.14 |12.16
|Xamarin.Android |7.0 |8.0 |10.0
|UWP |10.0 |10.0.16299 |to be defined
|Unity |2018.1 |2018.1 |to be defined
*Comment lire ce tableau ?*
Si vous voulez utiliser EF Core 3.0 avec une bibliothèque de classes écrites en .NET Standard, celle-ci doit utiliser au moins .NET Standard 2.1.
Si vous voulez utiliser EF Core 3.0 avec un projet Xamarin.iOS, celui-ci doit être au moins en version 12.16.
Si vous voulez utiliser EF Core dans une application UWP, vous ne pouvez pour le moment utiliser que EF Core 1.x ou 2.x.
---
*Note :*
Je n'ai pas l'intention de mettre à jour les exemples pour Entity Framework 6 ou pour .NET Framework, puisque la version 5 du framework va unifier .NET Framework et .NET Core. En conséquence, EF Core sera la nouvelle "norme".

@ -15,6 +15,7 @@
* one to one * one to one
* one to many * one to many
* many to many * many to many
* dictionaries
* foreign key * foreign key
* required and optional relationships * required and optional relationships
* indexes? * indexes?
Loading…
Cancel
Save