You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/p08_BDD_EntityFramework/ex_042_004_Keys_conventions
Marc CHEVALDONNE a773557095
continuous-integration/drone/push Build is failing Details
update to .NET6
2 years ago
..
Cylon.cs added sample ex_042_004_Keys_conventions 5 years ago
DBEntities.cs minor fixes and read me 5 years ago
Nounours.cs added ex_042_006 et ex_042_007 5 years ago
Program.cs added sample ex_042_004_Keys_conventions 5 years ago
ReadMe.md added ex_042_006 et ex_042_007 5 years ago
ex_042_004_Keys_conventions.csproj update to .NET6 2 years ago

ReadMe.md

ex_042_004_Keys_conventions

06/01/2020 ⋅ Marc Chevaldonné


Cet exemple traite des clés primaires associées aux entités.

Prérequis : je n'explique pas à travers cet exemple les principes de base d'Entity Framework Core et en particulier les chaînes de connexion et le lien entre entité et table. Pour plus de renseignements sur :

  • les chaînes de connexion : ex_041_001_ConnectionStrings
  • les liens entre entités et tables : ex_042_001_EF_CF_conventions, ex_042_002_EF_CF_data_annotations et ex_042_003_EF_CF_Fluent_API

Cet exemple montre le cas particulier de la gestion des clés primaires lors de l'utilisation des conventions d'écriture.
Vous pourrez trouver une version plus ou moins équivalente avec les data annotations ici : ex_042_005_Keys_data_annotations.
Vous pourrez trouver une version plus ou moins équivalente avec la Fluent API ici : ex_042_006_Keys_FluentAPI.


Les clés primaires

Une clé permet de rendre unique chaque instance d'une entité. La plupart des entités n'ont qu'une seule clé qui est alors transformée en clé primaire pour les bases de données relationnelles.
Note: une entité peut avoir d'autres clés, on parle d'alternate keys. Elles seront présentées dans les exemples sur les relations entre entités.
Si on utilise les conventions d'écriture, une propriété pour être transformée en clé doit respecter les contraintes suivantes :

  • elle doit être nommée Id ou ID,
  • elle doit être nommée <typeDeLEntite>Id, e.g. NounoursId.

Les autres contraintes sur une clé dans le cas de l'utilisation des conventions d'écriture sont :

  • elle doit être de type int, string, byte[]. Toutefois, certains types nécessitent l'utilisation de converteurs pour être utilisés avec certains fournisseurs. Je conseille donc l'utilisation de int qui marche avec la grande majorité des fournisseurs.
  • elle est générée lors de l'insertion en base.

Les autres modes (data annotations et Fluent API) offrent plus de solutions quant à la gestion des clés.

La classe Nounours

La classe Nounours utilise les conventions d'écriture.

  • Par défaut, les propriétés utilisées comme clés primaires sont en mode Generated on add. Une nouvelle valeur est donc générée lors de l'insertion d'une nouvelle entité en base. Les valeurs des autres propriétés ne sont pas générées lors de l'insertion ou de la mise à jour.
  • Dans cette classe, j'ai respecté la contrainte de nommage qui propose Id ou ID
public int ID
{
    get; set;
}

La classe Cylon

La classe Cylon utilise les conventions d'écriture.

  • Dans cette classe, j'ai respecté la contrainte de nommage qui propose <TypeDeLEntité>Id
public int CylonId
{
    get; set;
}

La classe Program

Cette classe est le point d'entrée du programme :

  • Elle crée des instances de Nounours et de Cylon et les ajoute en base après avoir nettoyé les tables au préalables.
  • Elle affiche les Nounours et les Cylon. Notez la génération des identifiants.

Comment exécuter cet exemple ?

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.
  • Dans la console que vous venez d'ouvrir, déplacez-vous dans le dossier du projet .NET Core, ici :
cd .\p08_BDD_EntityFramework\ex_042_004_Keys_conventions

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 :
dotnet ef migrations add migration_ex_042_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_042_004_Keys_conventions.

  • 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.

  • Pour cela, allez dans le menu Affichage puis Explorateur d'objets SQL Server.

  • Déployez dans l'Explorateur d'objets SQL Server :

    • SQL Server,
    • puis (localdb)\MSSQLLocalDB ...,
    • puis Bases de données
    • puis celle portant le nom de votre migration, dans mon cas : ex_042_004_Keys_conventions.Nounours.mdf
    • puis Tables
    • Faites un clic droit sur la table dbo.Nounours puis choisissez Afficher les données
  • Le résultat de l'exécution peut être :

database after cleaning and adding 3 Nounours and 9 Cylons and saving changes :
        Nounours 1: Chewbacca (27/05/1977, 1234567 poils)
        Nounours 2: Yoda (21/05/1980, 3 poils)
        Nounours 3: Ewok (25/05/1983, 3456789 poils)
        Cylon 1: John Cavil, Number 1
        Cylon 2: Leoben Conoy, Number 2
        Cylon 3: D'Anna Biers, Number 3
        Cylon 4: Simon, Number 4
        Cylon 5: Aaron Doral, Number 5
        Cylon 6: Caprica 6, Number 6
        Cylon 7: Daniel, Number 7
        Cylon 8: Boomer, Number 8
        Cylon 9: Athena, Number 8

Note: les identifiants peuvent varier en fonction du nombre d'exécution de l'exemple depuis la création de la base de données.