|
|
|
|
# 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<6E>re simple, l<>g<EFBFBD>re et extensible, des bases de donn<6E>es.
|
|
|
|
|
EF permet de g<>rer de nombreux *providers* (SQL Server, SQLite, Cosmos, ...) de mani<6E>re transparente.
|
|
|
|
|
EF vous permet <20>galement de mettre <20> jour vos bases de donn<6E>es et d'ex<65>cuter des requ<71>tes sans avoir <20> <20>crire la moindre requ<71>te SQL. Vous pouvez passer par LINQ to SQL qui apportera plus de lisibilit<69> et permettra au compilateur de vous aider <20> d<>tecter vos erreurs.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
*Note:*
|
|
|
|
|
Diff<EFBFBD>rentes solutions existent avec EF pour g<>rer une base de donn<6E>es dont le mod<6F>le existe par exemple. Dans ces exemples, je ne traiterai que la partie *Code First*, c'est-<2D>-dire le cas o<> le mod<6F>le est cr<63><72> <20> partir de vos classes.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
## Plan
|
|
|
|
|
Les exemples sont organis<69>s selon le plan suivant:
|
|
|
|
|
1. *Fundamentals* :
|
|
|
|
|
Dans cette partie, je donnerai quelques notions pour se connecter <20> une base <20> l'aide de cha<68>ne de connection (*connection strings*), comment utiliser des *providers de tests...*.
|
|
|
|
|
Il s'agira en cons<6E>quence d'exemples simples manquants d'explications sur certains points, car ils seront pr<70>sent<6E>s plus tard.
|
|
|
|
|
2. *Model* :
|
|
|
|
|
Ce chapitre s'attardera sur le lien entre le mod<6F>le et la base de donn<6E>es. En effet, avec EF, l'acc<63>s aux donn<6E>es se fait via le mod<6F>le, c'est-<2D>-dire l'ensemble de vos classes (qui seront reli<6C>es <20> des tables cr<63><72>es plus ou moins automatiquement)
|
|
|
|
|
ainsi qu'un contexte (```DbContext```) qui repr<70>sentera une session de connexion avec votre (ou vos) base(s) de donn<6E>es.
|
|
|
|
|
Je pr<70>senterai en cons<6E>quence tout d'abord comment <20>crire des classes pour votre mod<6F>le, puis comment <20>crire les diff<66>rentes relations classiques (aggr<67>gation, *one to one*, *one to many*, *many to many*, mais aussi les dictionnaires), comment g<>rer les h<>ritages entre classes du mod<6F>le dans la base de donn<6E>es, etc.
|
|
|
|
|
3. *Schemas and migrations* :
|
|
|
|
|
Le but de ce chapitre sera de vous montrer comment garder votre mod<6F>le et votre base de donn<6E>es synchronis<69>s.
|
|
|
|
|
4. *Querying (LINQ to SQL) and saving data* :
|
|
|
|
|
*Language INtegrated Query* (LINQ) est un outil de requ<71>te sur collections et sa version LINQ to SQL vous permet de passer tr<74>s facilement <20> un syst<73>me de requ<71>tes sur les bases de donn<6E>es.
|
|
|
|
|
Les requ<71>tes LINQ sont automatiquement traduites en requ<71>tes SQL, vous <20>vitant ainsi d'avoir <20> <20>crire vos requ<71>tes vous-m<>mes. Elles sont d<>s lors beaucoup plus lisibles et faciles <20> <20>crire.
|
|
|
|
|
Ce chapitre pr<70>sente comment charger des donn<6E>es, r<>aliser du filtrage, de mani<6E>re synchrone ou asynchrone, etc.
|
|
|
|
|
Il montre bien s<>r <20>galement comment r<>aliser le sym<79>trique : mettre <20> jour, supprimer ou ajouter de nouvelles donn<6E>es dans la base.
|
|
|
|
|
5. *Database providers* :
|
|
|
|
|
EF vous permet de g<>rer votre base de donn<6E>es ind<6E>pendamment du *provider*. Ce chapitre montrera donc comment utiliser diff<66>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 <20>crits pour .NET Core 3.0, mais vous pouvez utiliser EF Core avec diff<66>rents types projets. Voici les recommendations actuelles de Microsoft quant <20> 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<74>que de classes <20>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 <20>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 <20> 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<6E>quence, EF Core sera la nouvelle "norme".
|
|
|
|
|
|
|
|
|
|
|