Valmistuge MySQL-ile juurdepääsuks Entity Framework Core'iga (andmebaas-kõigepealt)
Toimingu kinnitamise keskkond
- Visuaalne stuudio
-
- Visuaalne stuudio 2022
- .NET
-
- .NET 8
- Üksuse raamistiku tuum
-
- Olemi raamistiku tuum 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Ülaltoodud on kinnituskeskkond, kuid see võib toimida ka teistes versioonides.
Alguses
Entity Framework Core on O/R kaardistajate teek, mis võimaldab teil andmebaasi kirjetele juurde pääseda koodiga määratletud mudelite (klasside) kaudu, ilma et peaksite andmebaasile juurdepääsul otse SQL-lauseid kirjutama. See annab järgmised eelised:
- Ei kirjuta SQL-lauseid otse, vähendades turvariske, nagu SQL-i süstimine
- Kuna SQL-laused on stringid, isegi kui nad teevad süntaksis vea, ei kontrollita neid ehitusvigade suhtes, kuid kuna mudel on programmi süntaks, saab seda koostamise ajal vigade suhtes kontrollida.
Entity Framework Core genereerib automaatselt koodi, et luua ühendus nende mudelite ja andmebaasidega olemasolevatest andmebaasidest, Ja vastupidi, on võimalus koodi käsitsi kirjutada ja seejärel andmebaasi automaatselt genereerida.
Esimest nimetatakse "andmebaasi-esimeseks" ja teist "koodi-esimeseks". Samuti on olemas "mudel kõigepealt", mis genereerib koodi ja andmebaase joonistest, näiteks ER-diagrammidest, kuid seda ei kasutata laialdaselt Entity Framework Core'is.
Seekord kasutame "andmebaas kõigepealt" mustrit, mis genereerib koodi eeldusel, et andmebaas on juba olemas.
MySQL-i seadistamine
Selles näpunäites veenduge, et seadistate MySQL-i eelnevalt MySQL-i andmebaasile juurdepääsuks. Seda saab häälestada arvutis teie arenduskeskkonnas või mõnes muus arvutis võrgu kaudu. Kui saate oma arenduskeskkonnast MySQL-iga ühenduse luua, on teil hea minna. Selles näpunäites oleme installinud MySQL-i erinevasse keskkonda.
MySQL-i seadistamise etapid jäetakse välja, kuna need on üleliigsed. Järgmised lehed sisaldavad MySQL-iga seotud näpunäiteid häälestustoimingute kohta.
Tabeli loomine
Sel juhul loome näidisena järgmise skeemi (andmebaasi) ja tabeli.
- Skeemi nimi : test_schema
- Tabeli nimi : kasutaja
- Tabeli veerud : [id], [nimi], [parool], [vanus], [e-post], [sünnipäev], [is_provisional_registration], [update_datetime]
Pole tähtis, kuidas te seda kirjutate, kuid kui see on tüütu, käivitage ja genereerige MySQL-i vastu järgmine SQL:
Järgmine on skeemi loomise SQL:
CREATE DATABASE `test_schema`;
Tabeli loomine on 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='テストコメント';
Kirje lisamine SQL-i.
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');
Konto lubade määramine
Veenduge, et teil oleks hostinimi seadistatud, et teie programmeeritav konto pääseks MySQL-i skeemile juurde.
Samuti peate määrama õigused test_schema
kontole juurdepääsuks, millega soovite ühenduse luua.
Seekord teostame SELECT
kirjete hankimise protsessi.
Ma ei tee seda seekord, aga kui soovite INSERT
UPDATE
sisestada või värskendada, kontrollige ja .
Visual Studio häälestus
Eeldades, et olete ka selle juba seadistanud. Kui soovite teada seadistusprotseduuri, oleme selle järgmisel lehel kokku võtnud.
Projekti loomine
Entity Framework Core ei sõltu konkreetsest täitmiskeskkonnast, seega saab seda kasutada paljudes projektides. Sel juhul kasutame Entity Framework Core'i lihtsas konsoolirakenduse keskkonnas.
Valige uues projektis Konsoolirakendus (olenevalt sellest, kumb pole .NET Framework).
Olete projekti loonud. Projekti nimi võib olla ükskõik milline.
Hankige MySQL-i jaoks Entity Framework Core pakett
Hankige pakett Entity Framework Core'i kasutamiseks koos NuGetiga. Pakendis kasutatakse: See ei ole Microsofti ametlik, kuid seda kasutatakse laialdaselt.
- Pomelo.EntityFrameworkCore.MySql
Paremklõpsake sõltuvusel ja valige NuGeti pakettide haldamine.
Kui vahekaardilt on valitud "Sirvi", tippige otsinguväljale Pomelo
. Kuvatakse seotud pakettide loend.
Installige sellest järgmised paketid:
- Pomelo.EntityFrameworkCore.MySql
Valige, mida soovite installida, ja klõpsake nuppu Installi. Valige versiooni jaoks uusim stabiilne versioon.
Dialoog on põhimõtteliselt OK ja hea.
Ma arvan, et pakett on järgmine.
Seejärel sisestage EntityFrameworkCore
otsinguväljale ja installige ka järgmine.
- Microsoft.EntityFrameworkCore.Tools
Versioonide Pomelo.EntityFrameworkCore.MySql
puhul sobitage versioon, millele viitab. Microsoft.EntityFrameworkCore
Seekord viitame 8.0.2-le, nii et Microsoft.EntityFrameworkCore.Tools
teeme sellest ka 8.0.2.
Seda paketti kasutatakse andmebaasist koodi genereerimiseks.
Lõpuks peaks see välja nägema selline:
Mudeli (koodi) loomine andmebaasitabeli konfiguratsioonist
Mudeli ja muu koodi automaatseks genereerimiseks peate esmalt koostama oma projekti, et veenduda, et selles pole vigu. Vea korral mudel ebaõnnestub. Kui olete juba kontrollinud, et vigu pole, ei pea te ehitama.
Avage paketihalduri konsool Visual Studiost. Kui ei, siis saate selle avada menüüst Tööriistad, NuGeti paketihaldur ja Paketihalduri konsool.
Näete allolevat akent, seega veenduge, et paremas ülanurgas olev "Vaikeprojekt" on projekt, mille jaoks soovite mudeli luua. (Peate olema ettevaatlik, kui teil on mitu projekti)
Sisestage sisestusväljale järgmine tekst: Parameetrid muutuvad sõltuvalt keskkonnast, seega muutke neid õigeaegselt järgmiste selgituste põhjal.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Sisendi näide
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parameetri | selgituse | parameetri näide |
---|---|---|
Pakkuja | Kui see on Pomelo.EntityFrameworkCore.MySql MySQL, määrake näiteks. |
Pomelo.EntityFrameworkCore.MySql |
Ühendus | See on ühendusstring andmebaasiga ühenduse loomiseks. Ühendusstringi saab kasutada ka teistes rakendustes, seega kirjutage määratud sisu vastavalt ühendusstringi tähistusele. Muide, seda kasutatakse ainult ajutiselt mudeli loomiseks, seega pole vaja pärast selle ühendusstringi rakenduse avaldamist turvalisusest teadlik olla. Kui teie paroolis on sümbol, olge põgenemise suhtes ettevaatlik. | "Server=TestServer; Andmebaas=test_schema; kasutaja=test-kasutaja; parool=XXXXXXXX;" |
f | Sund ülekirjutamine isegi siis, kui teil on programm juba olemas. | Ei <> |
Väljund Dir | Koodi väljastamise kausta tee. Suhteline tee projekti kaustast | Mudelid\Andmebaas |
Kontekst | Kontekstiklasside nimed olemiraamistiku kasutamisel | TestDatabaseDbContext |
UseDatabaseNames | Kui see on määratud, on andmebaasi tabeli nimi klassi nimi sellisena, nagu see on. Kui ei, siis korrigeeritakse üksuse klassi nime juhtumit vastavalt reeglitele. | Ei <> |
AndmedAnnotatsioonid | Kui see on määratud, lisab veerutüüp igale atribuudile automaatselt atribuudi DataAnnotation. See on natuke kasulik, kui soovite automaatselt sisendi kontrolli teha vastavalt andmebaasi tüübile. | Ei <> |
Namespace | Nimeruum, kuhu loodud olemiklass kuulub. Kui seda pole määratud, määratakse nimeruum vastavalt kaustale. | TestNamespace |
Konteksti nimeruum | Nimeruum, kuhu loodud kontekst kuulub. Kui seda pole määratud, määratakse nimeruum vastavalt kaustale. | TestNamespace |
NoOnConfiguring | Vältige töötlemata ühendusstringide manustamist oma koodi. | Ei <> |
NoPluralize | Vältige kontekstis iga tabelinime mitmuse atribuudi nime. | Ei <> |
Selle käivitamiseks ja koodi automaatseks genereerimiseks vajutage sisestusklahvi: Kui tegemist on veaga, kuvatakse põhjus, seega vastake vastavalt vea sisule.
user
Tabeli mudelikood näeb välja selline:
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; }
}
Muide, hoiatus kuvatakse, kuna ühendusstring on kirjutatud nii, nagu see on loodud kontekstiklassi koodis. Võimalusel tuleks ühendusstring salvestada eraldi kohta ja seadistada käitusajal, kuid seekord on see toimingu kontrollimiseks, nii et jätan selle nii, nagu see on.
Kirje hankimine ja selle vaatamine
Nüüd, kui teil on kood andmebaasi kirjetele juurdepääsuks, proovime kirjed hankida ja konsoolis kuvada.
Program.cs
ja muutke seda järgmiselt.
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));
}
Looge DbContext
automaatselt loodud klass new
kombel . See on deklareeritud, et võimaldada using var
andmebaasiühenduse automaatset hävitamist.
dbContext
on loonud atribuudid igale mudelile juurdepääsuks, nii et seekord user
saate tabeli kirjetega manipuleerida, avades User
atribuudid.
Te ei pea olema teadlik väljastatud SQL-ist, kuna see luuakse automaatselt sisemiselt.
ToList
Siin kasutame user
laiendusmeetodit, et saada kõik tabelis olevad kirjed.
foreach
Pärast seda kasutan user
konsoolis teabe kuvamiseks meetodeid jaJsonSerializer.Serialize
.
Nagu user
eespool mainitud, deklareeritakse iga tabeli veerg omadusena, seega on võimalik väärtust ka eraldi hankida.