diff --git a/Exemples.sln b/Exemples.sln index e108407..69e495d 100644 --- a/Exemples.sln +++ b/Exemples.sln @@ -90,13 +90,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap039_LINQ_to_XML", "chap EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap040_LINQ_to_Json", "chap040_LINQ_to_Json", "{3BD95300-E2F6-4CA6-B4CC-5D19DF5C6AC0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "p08_BDD", "p08_BDD", "{65DF0C9A-4F06-4361-8DD9-E8360B6325CA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap042_EntityFramework", "chap042_EntityFramework", "{ED951AD1-2EB1-49CC-9DBE-E3360E11525B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "p08_BDD_EntityFramework", "p08_BDD_EntityFramework", "{65DF0C9A-4F06-4361-8DD9-E8360B6325CA}" 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 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}" 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}" @@ -536,6 +537,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_042_011_EF_CF_Many_to_Ma 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}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "chap041_EF_Fundamentals", "chap041_EF_Fundamentals", "{56C5A51B-16E9-4F93-9C32-8F91710391E8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -4747,6 +4750,7 @@ Global {BCE167F6-6323-46FC-A112-D9941A75815A} = {7FDA2D7D-5385-485D-B8B5-60727583D6ED} {4F8FDCA9-D98C-4137-BD14-C255506209B0} = {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 GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E} diff --git a/p08_BDD_EntityFramework/EntityFramework.md b/p08_BDD_EntityFramework/EntityFramework.md new file mode 100644 index 0000000..e3807b1 --- /dev/null +++ b/p08_BDD_EntityFramework/EntityFramework.md @@ -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". + + diff --git a/temp.md b/p08_BDD_EntityFramework/temp.md similarity index 97% rename from temp.md rename to p08_BDD_EntityFramework/temp.md index 579c7a4..6425d03 100644 --- a/temp.md +++ b/p08_BDD_EntityFramework/temp.md @@ -15,6 +15,7 @@ * one to one * one to many * many to many + * dictionaries * foreign key * required and optional relationships * indexes?