Pregătiți-vă pentru a accesa MySQL cu Entity Framework Core (baze de date mai întâi)
Mediu de confirmare a funcționării
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- .NET 8
- Nucleul Entity Framework
-
- Entity Framework Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Cele de mai sus sunt un mediu de verificare, dar pot funcționa în alte versiuni.
La început
Entity Framework Core este o bibliotecă de mappere O/R care vă permit să accesați înregistrările bazei de date prin modele definite de cod (clase) fără a scrie direct instrucțiuni SQL atunci când accesați baza de date. Acest lucru oferă următoarele beneficii:
- Nu scrie instrucțiuni SQL direct, reducând riscurile de securitate, cum ar fi injecția SQL
- Deoarece instrucțiunile SQL sunt șiruri de caractere, chiar dacă fac o greșeală în sintaxă, ele nu sunt supuse verificării erorilor de construcție, dar deoarece modelul este o sintaxă de program, poate fi verificat pentru erori în timpul construcției.
Entity Framework Core generează automat cod pentru a se conecta la aceste modele și baze de date din bazele de date existente, În schimb, există o modalitate de a scrie manual cod și apoi de a genera automat o bază de date.
Prima se numește "bază de date mai întâi", iar cea de-a doua se numește "cod mai întâi". Există, de asemenea, "model-first" care generează cod și baze de date din planuri, cum ar fi diagramele ER, dar nu este utilizat pe scară largă în Entity Framework Core.
De data aceasta, vom folosi un model "bază de date mai întâi" care generează cod presupunând că o bază de date există deja.
Configurare MySQL
În acest sfat, asigurați-vă că ați configurat MySQL în prealabil pentru a accesa baza de date MySQL. Poate fi configurat pe un PC din mediul de dezvoltare sau pe un alt PC prin rețea. Dacă vă puteți conecta la MySQL din mediul de dezvoltare, sunteți gata. În acest sfat, am instalat MySQL într-un mediu diferit.
Pașii de configurare MySQL vor fi omiși, deoarece vor fi redundanti. Următoarele pagini conțin sfaturi legate de MySQL pentru pașii de configurare.
Crearea unui tabel
În acest caz, vom crea următoarea schemă (bază de date) și tabel ca eșantion.
- Nume schemă : test_schema
- Nume tabel : utilizator
- Coloane de tabel: [id], [nume], [parolă], [vârstă], [e-mail], [zi de naștere], [is_provisional_registration], [update_datetime]
Nu contează cum îl scrii, dar dacă este plictisitor, rulează și generează următorul SQL împotriva MySQL:
Următoarea este crearea schemei SQL:
CREATE DATABASE `test_schema`;
Crearea tabelelor este 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='テストコメント';
Adăugați o înregistrare la 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');
Setarea permisiunilor pentru cont
Asigurați-vă că aveți un nume de gazdă configurat astfel încât contul pe care îl programați să poată accesa schema MySQL.
De asemenea, trebuie să setați permisiuni pentru a accesa test_schema
contul la care doriți să vă conectați.
De data aceasta, vom efectua SELECT
procesul de preluare a înregistrărilor.
Nu o voi face de data aceasta, dar dacă INSERT
UPDATE
doriți să inserați sau să actualizați, vă rugăm să verificați și .
Instalarea Visual Studio
Presupunând că l-ați configurat deja și dvs. Dacă doriți să cunoașteți procedura de configurare, am rezumat-o pe pagina următoare.
Creați un proiect
Entity Framework Core nu depinde de un anumit mediu de execuție, deci poate fi utilizat în multe proiecte. În acest caz, vom utiliza Entity Framework Core într-un mediu simplu de aplicație de consolă.
În noul proiect, selectați Aplicație consolă (oricare dintre acestea nu este .NET Framework).
Ați creat proiectul. Numele proiectului poate fi orice.
Obțineți pachetul Entity Framework Core pentru MySQL
Obțineți un pachet pentru a utiliza Entity Framework Core cu NuGet. Pachetul folosește: Acest lucru nu este oficial de la Microsoft, dar este utilizat pe scară largă.
- Pomelo.EntityFrameworkCore.MySql
Faceți clic dreapta pe dependență și selectați Gestionare pachete NuGet.
Cu "Răsfoire" selectat din filă, tastați în câmpul Pomelo
de căutare . Va fi afișată lista pachetelor asociate.
Instalați următoarele pachete din aceasta:
- Pomelo.EntityFrameworkCore.MySql
Selectați ceea ce doriți să instalați și faceți clic pe butonul Instalare. Selectați cea mai recentă versiune stabilă pentru versiune.
Dialogul este practic OK și bine.
Cred că pachetul este următorul.
Apoi tastați EntityFrameworkCore
în câmpul de căutare și instalați și următoarele.
- Microsoft.EntityFrameworkCore.Tools
Pentru versiuni, Pomelo.EntityFrameworkCore.MySql
potriviți versiunea la Microsoft.EntityFrameworkCore
care se face referire prin .
De data aceasta ne referim la 8.0.2, așa că Microsoft.EntityFrameworkCore.Tools
haideți să-l facem și 8.0.2.
Acest pachet este utilizat pentru a genera cod din baza de date.
În cele din urmă, ar trebui să arate astfel:
Crearea unui model (cod) dintr-o configurație de tabel de bază de date
Pentru ca modelul și alte coduri să fie generate automat, trebuie mai întâi să construiți proiectul pentru a vă asigura că nu există erori. Dacă există o eroare, modelul va eșua. Dacă ați verificat deja că nu există erori, nu trebuie să construiți.
Deschideți consola Manager de pachete din Visual Studio. Dacă nu, îl puteți deschide din meniul Instrumente, Manager de pachete NuGet și Consola Manager de pachete.
Veți vedea o fereastră ca cea de mai jos, așa că asigurați-vă că "Proiect implicit" din colțul din dreapta sus este proiectul pentru care doriți să creați modelul. (Trebuie să fii atent dacă ai mai multe proiecte)
Introduceți următorul text în câmpul de introducere: Parametrii se vor schimba în funcție de mediu, așa că vă rugăm să îi schimbați în timp util pe baza următoarelor explicații.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Exemplu de intrare
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Explicația parametrilor | Exemplu de parametru | |
---|---|---|
Furnizor | Dacă este Pomelo.EntityFrameworkCore.MySql MySQL, specificați cum ar fi. |
Pomelo.EntityFrameworkCore.MySql |
Conexiune | Acesta este șirul de conexiune pentru a vă conecta la baza de date. Șirul de conexiune poate fi utilizat în alte aplicații, așa că vă rugăm să scrieți conținutul specificat conform notației șirului de conexiune. Apropo, este folosit doar temporar pentru a crea un model, deci nu este nevoie să fiți conștienți de securitate după publicarea aplicației pentru acest șir de conexiune. Dacă aveți un simbol în parolă, aveți grijă la evadare. | "Server=TestServer; Bază de date=test_schema; utilizator = utilizator-test; parolă=XXXXXXXX;" |
f | Forțați suprascrierea chiar dacă aveți deja un program. | Fără <> |
Dirijor de ieșire | Calea folderului pentru a scoate codul. Calea relativă din folderul de proiect | Modele\Bază de date |
Context | Nume de clasă de context atunci când se utilizează Entity Framework | TestDatabaseDbContext |
Nume de bază de date | Dacă este specificat, numele tabelului din baza de date va fi numele clasei așa cum este. În caz contrar, cazul numelui clasei de entitate este ajustat în conformitate cu regulile. | Fără <> |
Adnotări de date | Dacă este specificat, tipul de coloană adaugă automat atributul DataAnnotation la fiecare proprietate. Acest lucru este puțin util dacă doriți să faceți automat verificarea intrării în funcție de tipul bazei de date. | Fără <> |
Namespace | Spațiul de nume căruia îi aparține clasa de entitate generată. Dacă nu este specificat, spațiul de nume este determinat în funcție de folder. | TestNamespace |
ContextNamespace | Spațiul de nume căruia îi aparține contextul generat. Dacă nu este specificat, spațiul de nume este determinat în funcție de folder. | TestNamespace |
NoOnConfiguring | Evitați încorporarea șirurilor de conexiune brute în cod. | Fără <> |
NuPluralizare | Evitați numele proprietății la plural al fiecărui nume de tabel din context. | Fără <> |
Apăsați Enter pentru a-l rula și a genera automat codul: Dacă este o eroare, motivul va fi afișat, așa că vă rugăm să răspundeți în funcție de conținutul erorii.
user
Codul modelului pentru tabel arată astfel:
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; }
}
Apropo, avertismentul este afișat deoarece șirul de conexiune este scris așa cum este în codul clasei de context generate. Dacă este posibil, șirul de conexiune trebuie stocat într-un loc separat și setat în timpul rulării, dar de data aceasta este în scopul verificării operațiunii, așa că îl voi lăsa așa cum este.
Obțineți o înregistrare și vizualizați-o
Acum că aveți codul pentru a accesa înregistrările din baza de date, să încercăm să obținem înregistrările și să le afișăm în consolă.
Program.cs
și modificați-l după cum urmează.
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));
}
Generați DbContext
clasa new
generată automat cu . Este declarat pentru a permite using var
distrugerea automată a conexiunii la baza de date.
dbContext
a generat proprietăți pentru a accesa fiecare model, astfel încât de data user
aceasta puteți manipula înregistrările din tabel accesând User
proprietățile.
Nu trebuie să fiți conștienți de SQL-ul care este emis deoarece este generat automat intern.
ToList
Aici folosim user
o metodă de extensie pentru a obține toate înregistrările din tabel.
foreach
După aceea, folosesc user
metodele și JsonSerializer.Serialize
pentru a afișa informațiile în consolă.
După cum user
am menționat mai sus, fiecare coloană din tabel este declarată ca proprietate, deci este posibilă și preluarea valorii individual.