Préparation de l’accès à MySQL avec Entity Framework Core (base de données d’abord)
Environnement de confirmation de l’opération
- Studio visuel
-
- Visual Studio 2022
- .FILET
-
- .NET 8
- Noyau d’Entity Framework
-
- Entity Framework Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Ce qui précède est un environnement de vérification, mais il peut fonctionner dans d’autres versions.
Au début
Entity Framework Core est une bibliothèque de mappeurs O/R qui vous permet d’accéder aux enregistrements de base de données par le biais de modèles définis par le code (classes) sans écrire directement d’instructions SQL lors de l’accès à la base de données. Cela offre les avantages suivants :
- N’écrit pas directement d’instructions SQL, ce qui réduit les risques de sécurité tels que l’injection SQL
- Étant donné que les instructions SQL sont des chaînes, même si elles commettent une erreur de syntaxe, elles ne sont pas soumises à la vérification des erreurs de construction, mais comme le modèle est une syntaxe de programme, il peut être vérifié pour les erreurs au moment de la construction.
Entity Framework Core génère automatiquement du code pour se connecter à ces modèles et bases de données à partir de bases de données existantes, À l’inverse, il existe un moyen d’écrire manuellement du code, puis de générer automatiquement une base de données.
Le premier est appelé « database-first » et le second est appelé « code-first ». Il existe également le « modèle d’abord » qui génère du code et des bases de données à partir de blueprints, tels que des diagrammes ER, mais il n’est pas largement utilisé dans Entity Framework Core.
Cette fois, nous allons utiliser un modèle « database-first » qui génère du code en supposant qu’une base de données existe déjà.
Configuration de MySQL
Dans cette astuce, assurez-vous de configurer MySQL au préalable pour accéder à votre base de données MySQL. Il peut être configuré sur un PC de votre environnement de développement ou sur un autre PC sur le réseau. Si vous pouvez vous connecter à MySQL à partir de votre environnement de développement, vous êtes prêt à partir. Dans cette astuce, nous avons installé MySQL dans un environnement différent.
Les étapes de configuration de MySQL seront omises car elles seront redondantes. Les pages suivantes contiennent des conseils liés à MySQL pour les étapes de configuration.
Création d’une table
Dans ce cas, nous allons créer le schéma (base de données) et la table suivants en tant qu’exemple.
- Nom du schéma : test_schema
- Nom de la table : utilisateur
- Colonnes du tableau : [id], [nom], [mot de passe], [âge], [email], [anniversaire], [is_provisional_registration], [update_datetime]
Peu importe comment vous l’écrivez, mais si c’est fastidieux, exécutez et générez le code SQL suivant sur MySQL :
Voici la création de schéma SQL :
CREATE DATABASE `test_schema`;
La création de table est SQL.
CREATE TABLE `user` (
`id` int NOT NULL,
`name` varchar(20) NOT NULL,
`password` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL,
`email` varchar(200) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`is_provisional_registration` tinyint(1) NOT NULL,
`update_datetime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='テストコメント';
Ajouter un enregistrement à SQL.
INSERT INTO `test_schema`.`user` (`id`,`name`,`password`,`age`,`email`,`birthday`,`is_provisional_registration`,`update_datetime`) VALUES (1, '氏名1', 'aaaa', 20, 'aaaa@example.com', '2020-04-01', 0, '2021-03-14T00:00:00.0000000');
INSERT INTO `test_schema`.`user` (`id`,`name`,`password`,`age`,`email`,`birthday`,`is_provisional_registration`,`update_datetime`) VALUES (2, '氏名2', 'bbbb', 30, 'bbbb@example.com', '2010-04-01', 1, '2021-03-14T00:00:00.0000000');
Définir les autorisations pour votre compte
Assurez-vous d’avoir un nom d’hôte configuré pour que le compte que vous programmez puisse accéder au schéma MySQL.
Vous devez également définir des autorisations pour test_schema
accéder au compte auquel vous souhaitez vous connecter.
Cette fois, nous allons effectuer SELECT
le processus de récupération des enregistrements.
Je ne le ferai pas cette fois-ci, mais si vous INSERT
UPDATE
souhaitez insérer ou mettre à jour, veuillez vérifier et .
Installation de Visual Studio
En supposant que vous l’ayez déjà configuré également. Si vous souhaitez connaître la procédure d’installation, nous l’avons résumée sur la page suivante.
Créer un projet
Entity Framework Core ne dépend pas d’un environnement d’exécution spécifique, il peut donc être utilisé dans de nombreux projets. Dans ce cas, nous allons utiliser Entity Framework Core dans un environnement d’application console simple.
Dans le nouveau projet, sélectionnez Application console (celle qui n’est pas .NET Framework).
Vous avez créé le projet. Le nom du projet peut être n’importe quoi.
Obtenir le package Entity Framework Core pour MySQL
Obtenez un package pour utiliser Entity Framework Core avec NuGet. Le package utilise : Ce n’est pas officiel de Microsoft, mais c’est largement utilisé.
- Pomelo.EntityFrameworkCore.MySql
Cliquez avec le bouton droit sur la dépendance et sélectionnez Gérer les packages NuGet.
Avec « Parcourir » sélectionné dans l’onglet, tapez dans le champ Pomelo
de recherche . La liste des packages associés s’affiche.
Installez les paquets suivants à partir de celui-ci :
- Pomelo.EntityFrameworkCore.MySql
Sélectionnez ce que vous souhaitez installer et cliquez sur le bouton Installer. Sélectionnez la dernière version stable de la version.
Le dialogue est fondamentalement correct et bien.
Je pense que le paquet est le suivant.
Tapez EntityFrameworkCore
ensuite dans le champ de recherche et installez également ce qui suit.
- Microsoft.EntityFrameworkCore.Tools
Pour les versions, Pomelo.EntityFrameworkCore.MySql
correspondez à la version référencée Microsoft.EntityFrameworkCore
par .
Cette fois, nous faisons référence à la version 8.0.2, alors Microsoft.EntityFrameworkCore.Tools
faisons-en également la version 8.0.2.
Ce package est utilisé pour générer du code à partir de la base de données.
En fin de compte, cela devrait ressembler à ceci :
Création d’un modèle (code) à partir d’une configuration de table de base de données
Pour que votre modèle et d’autres codes soient générés automatiquement, vous devez d’abord générer votre projet pour vous assurer qu’il n’y a pas d’erreurs. S’il y a une erreur, le modèle échouera. Si vous avez déjà vérifié qu’il n’y a pas d’erreurs, vous n’avez pas besoin de générer.
Ouvrez la console du gestionnaire de package à partir de Visual Studio. Si ce n’est pas le cas, vous pouvez l’ouvrir à partir du menu Outils, Gestionnaire de package NuGet et Console du gestionnaire de package.
Vous verrez une fenêtre comme celle ci-dessous, alors assurez-vous que le « Projet par défaut » dans le coin supérieur droit est le projet pour lequel vous souhaitez créer le modèle. (Vous devez être prudent si vous avez plusieurs projets)
Entrez le texte suivant dans le champ de saisie : Les paramètres changeront en fonction de l’environnement, veuillez donc les modifier en temps opportun sur la base des explications suivantes.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Exemple d’entrée
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Explication du | paramètre | Exemple de paramètre |
---|---|---|
Fournisseur | S’il s’agit de Pomelo.EntityFrameworkCore.MySql MySQL, spécifiez such like. |
Pomelo.EntityFrameworkCore.MySql |
Connexion | Il s’agit de la chaîne de connexion pour se connecter à la base de données. La chaîne de connexion peut être utilisée dans d’autres applications, veuillez donc écrire le contenu spécifié selon la notation de la chaîne de connexion. Soit dit en passant, il n’est utilisé que temporairement pour créer un modèle, il n’est donc pas nécessaire d’être conscient de la sécurité après la publication de l’application pour cette chaîne de connexion. Si vous avez un symbole dans votre mot de passe, faites attention à ne pas vous échapper. | "Serveur=TestServer ; Base de données=test_schema ; user=utilisateur-test ; mot de passe=XXXXXXXX ;" |
f | Forcez l’écrasement même si vous avez déjà un programme. | Aucun <> |
Rép. de sortie | Chemin d’accès au dossier pour afficher le code. Chemin d’accès relatif à partir du dossier du projet | Modèles\Base de données |
Contexte | Noms de classe de contexte lors de l’utilisation d’Entity Framework | TestDatabaseDbContext |
UseDatabaseNames | S’il est spécifié, le nom de la table dans la base de données sera le nom de la classe tel qu’il est. Si ce n’est pas le cas, la casse du nom de la classe d’entité est ajustée en fonction des règles. | Aucun <> |
DataAnnotations | S’il est spécifié, le type de colonne ajoute automatiquement l’attribut DataAnnotation à chaque propriété. C’est un peu utile si vous voulez faire automatiquement la vérification des entrées en fonction du type de base de données. | Aucun <> |
Namespace | Espace de noms auquel appartient la classe d’entité générée. S’il n’est pas spécifié, l’espace de noms est déterminé en fonction du dossier. | Espace de noms de test |
ContextNamespace | Espace de noms auquel appartient le contexte généré. S’il n’est pas spécifié, l’espace de noms est déterminé en fonction du dossier. | Espace de noms de test |
NoOnConfiguration | Évitez d’incorporer des chaînes de connexion brutes dans votre code. | Aucun <> |
NonPluraliser | Évitez le nom de propriété au pluriel de chaque nom de table dans le contexte. | Aucun <> |
Appuyez sur Entrée pour l’exécuter et générer automatiquement le code : S’il s’agit d’une erreur, la raison s’affichera, veuillez donc répondre en fonction du contenu de l’erreur.
user
Le code de modèle de la table se présente comme suit :
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SetupMysqlDatabaseFirst.Models.Database;
<summary>
テストコメント
</summary>
public partial class user
{
[Key]
public int id { get; set; }
[StringLength(20)]
public string name { get; set; } = null!;
[StringLength(20)]
public string? password { get; set; }
public int? age { get; set; }
[StringLength(200)]
public string? email { get; set; }
public DateOnly? birthday { get; set; }
public bool is_provisional_registration { get; set; }
[Column(TypeName = "datetime")]
public DateTime? update_datetime { get; set; }
}
D’ailleurs, l’avertissement s’affiche car la chaîne de connexion est écrite telle quelle dans le code de la classe de contexte générée. Si possible, la chaîne de connexion doit être stockée dans un endroit séparé et définie au moment de l’exécution, mais cette fois, c’est dans le but de vérifier l’opération, donc je vais la laisser telle quelle.
Obtenir un enregistrement et le consulter
Maintenant que vous avez le code pour accéder aux enregistrements dans la base de données, essayons d’obtenir les enregistrements et de les afficher dans la console.
Program.cs
et modifiez-le comme suit.
using SetupMysqlDatabaseFirst.Models.Database;
using System.Text.Json;
Console.WriteLine("Hello, World!");
// データベースコンテキストのインスタンスを生成する
using var dbContext = new TestDatabaseDbContext();
// データベースから User 一覧を取得する
var users = dbContext.user.ToList();
// 取得した User 情報をコンソールに書き出す
foreach (var user in users)
{
Console.WriteLine(JsonSerializer.Serialize(user));
}
Générez la DbContext
classe new
générée automatiquement avec . Il est déclaré en pour permettre using var
la destruction automatique de la connexion à la base de données.
dbContext
a généré des propriétés pour accéder à chaque modèle, donc cette fois-ci user
, vous pouvez manipuler les enregistrements de la table en accédant User
aux propriétés.
Vous n’avez pas besoin de connaître le code SQL émis, car il est généré automatiquement en interne.
ToList
Ici, nous utilisons user
une méthode d’extension pour obtenir tous les enregistrements de la table.
foreach
Après cela, j’utilise user
les méthodes et JsonSerializer.Serialize
pour afficher les informations dans la console.
Comme user
mentionné ci-dessus, chaque colonne de la table est déclarée en tant que propriété, il est donc également possible de récupérer la valeur individuellement.