Príprava na prístup k MySQL pomocou Entity Framework Core (databáza)
Prostredie na potvrdenie prevádzky
- Visual Studio
-
- Visual Studio 2022
- .SIEŤ
-
- .NET 8
- Jadro rámca entít
-
- Entity Framework Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Vyššie uvedené je overovacie prostredie, ale môže fungovať aj v iných verziách.
Najskôr
Entity Framework Core je knižnica mapovačov O/R, ktoré umožňujú prístup k databázovým záznamom prostredníctvom modelov (tried) definovaných kódom bez priameho písania príkazov SQL pri prístupe k databáze. To poskytuje nasledujúce výhody:
- Nepíše príkazy SQL priamo, čím sa znižujú bezpečnostné riziká, ako je napríklad injektáž SQL
- Keďže príkazy SQL sú reťazce, aj keď urobia chybu v syntaxi, nepodliehajú kontrole chýb zostavenia, ale keďže model je syntax programu, možno ho skontrolovať na chyby v čase zostavovania.
Entity Framework Core automaticky generuje kód na pripojenie k týmto modelom a databázam z existujúcich databáz, Naopak, existuje spôsob, ako manuálne napísať kód a potom automaticky vygenerovať databázu.
Prvý sa nazýva "najprv databáza" a druhý sa nazýva "prvý kód". Existuje tiež "model-first", ktorý generuje kód a databázy z plánov, ako sú ER diagramy, ale nie je široko používaný v Entity Framework Core.
Tentoraz použijeme vzor "database-first", ktorý generuje kód za predpokladu, že databáza už existuje.
Nastavenie MySQL
V tomto tipe sa uistite, že ste predtým nastavili MySQL na prístup k databáze MySQL. Dá sa nastaviť na počítači vo vývojovom prostredí alebo na inom počítači cez sieť. Ak sa môžete pripojiť k MySQL zo svojho vývojového prostredia, môžete začať. V tomto tipe sme nainštalovali MySQL v inom prostredí.
Kroky nastavenia MySQL budú vynechané, pretože budú nadbytočné. Nasledujúce stránky obsahujú tipy týkajúce sa MySQL pre kroky nastavenia.
Vytvorenie tabuľky
V tomto prípade vytvoríme nasledujúcu schému (databázu) a tabuľku ako ukážku.
- Názov schémy : test_schema
- Názov tabuľky : používateľ
- Stĺpce tabuľky: [id], [meno], [heslo], [vek], [e-mail], [narodeniny], [is_provisional_registration], [update_datetime]
Nezáleží na tom, ako to napíšete, ale ak je to zdĺhavé, spustite a vygenerujte nasledujúce SQL proti MySQL:
Nasleduje SQL na vytváranie schémy:
CREATE DATABASE `test_schema`;
Vytváranie tabuliek je 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='テストコメント';
Pridajte záznam do 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');
Nastavenie povolení pre váš účet
Uistite sa, že máte nastavený názov hostiteľa, aby konto, ktoré programujete, malo prístup k schéme MySQL.
Musíte tiež nastaviť povolenia na prístup k test_schema
účtu, ku ktorému sa chcete pripojiť.
Tentokrát vykonáme SELECT
proces načítania záznamov.
Tentoraz to neurobím, ale ak chcete INSERT
UPDATE
vložiť alebo aktualizovať, skontrolujte a .
Nastavenie Visual Studia
Za predpokladu, že ste to už tiež nastavili. Ak chcete poznať postup nastavenia, zhrnuli sme ho na nasledujúcej stránke.
Vytvorenie projektu
Entity Framework Core nezávisí od konkrétneho vykonávacieho prostredia, takže ho možno použiť v mnohých projektoch. V tomto prípade použijeme Entity Framework Core v prostredí jednoduchej konzolovej aplikácie.
V novom projekte vyberte položku Konzolová aplikácia (podľa toho, čo nie je rozhranie .NET Framework).
Vytvorili ste projekt. Názov projektu môže byť akýkoľvek.
Získajte balík Entity Framework Core pre MySQL
Získajte balík na používanie Entity Framework Core s NuGetom. Balenie využíva: Nie je to oficiálne od spoločnosti Microsoft, ale je to široko používané.
- Pomelo.EntityFrameworkCore.MySql
Kliknite pravým tlačidlom myši na závislosť a vyberte položku Spravovať balíky NuGet.
Keď je na karte vybratá možnosť "Prehľadávať", zadajte do vyhľadávacieho poľa Pomelo
. Zobrazí sa zoznam súvisiacich balíkov.
Nainštalujte z toho nasledujúce balíky:
- Pomelo.EntityFrameworkCore.MySql
Vyberte, čo chcete nainštalovať, a kliknite na tlačidlo Inštalovať. Vyberte najnovšiu stabilnú verziu pre danú verziu.
Dialóg je v podstate v poriadku a v poriadku.
Myslím si, že balík je nasledovný.
Potom zadajte EntityFrameworkCore
do vyhľadávacieho poľa a nainštalujte aj nasledujúce.
- Microsoft.EntityFrameworkCore.Tools
V prípade verzií sa zhoda s verziou, Pomelo.EntityFrameworkCore.MySql
na ktorú Microsoft.EntityFrameworkCore
odkazuje .
Tentoraz máme na mysli 8.0.2, takže Microsoft.EntityFrameworkCore.Tools
urobme z toho aj 8.0.2.
Tento balík sa používa na generovanie kódu z databázy.
Nakoniec by to malo vyzerať takto:
Vytvorenie modelu (kódu) z konfigurácie databázovej tabuľky
Ak chcete, aby sa váš model a ďalší kód vygenerovali automaticky, musíte najprv zostaviť projekt, aby ste sa uistili, že neexistujú žiadne chyby. Ak sa vyskytne chyba, model zlyhá. Ak ste si už overili, že nie sú žiadne chyby, nemusíte stavať.
Otvorte konzolu Správcu balíkov zo sady Visual Studio. Ak nie, môžete ho otvoriť z ponuky Nástroje, Správca balíkov NuGet a Konzola Správcu balíkov.
Zobrazí sa okno podobné nižšie, preto sa uistite, že "Predvolený projekt" v pravom hornom rohu je projekt, pre ktorý chcete model vytvoriť. (Musíte byť opatrní, ak máte viacero projektov)
Do vstupného poľa zadajte nasledujúci text: Parametre sa budú meniť v závislosti od prostredia, preto ich včas zmeňte na základe nasledujúcich vysvetlení.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Príklad vstupu
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Vysvetlenie parametra | Príklad parametra | |
---|---|---|
Poskytovateľ | Ak je Pomelo.EntityFrameworkCore.MySql to MySQL, zadajte také, ako napríklad. |
Pomelo.EntityFrameworkCore.MySql |
Pripojenie | Toto je reťazec pripojenia na pripojenie k databáze. Pripojovací reťazec je možné použiť v iných aplikáciách, preto prosím napíšte zadaný obsah podľa zápisu reťazca pripojenia. Mimochodom, používa sa len dočasne na vytvorenie modelu, takže po publikovaní aplikácie pre tento reťazec pripojenia nie je potrebné uvedomovať si bezpečnosť. Ak máte v hesle symbol, dávajte si pozor na únik. | "Server=TestServer; Databáza=test_schema; user=test-user; heslo=XXXXXXXX;" |
f | Vynútiť prepísanie, aj keď už program máte. | Žiadne <> |
Výstupný dir | Cesta k priečinku na výstup kódu. Relatívna cesta z priečinka projektu | Modely\Databáza |
Kontext | Názvy kontextových tried pri používaní Entity Framework | TestDatabaseDbContext |
UseDatabaseNames | Ak je zadaný, názov tabuľky v databáze bude názov triedy taký, aký je. Ak nie, veľkosť písmen názvu triedy entít sa upraví podľa pravidiel. | Žiadne <> |
Dátové anotácie | Ak je zadaný, typ stĺpca automaticky pripojí atribút DataAnnotation ku každej vlastnosti. To je trochu užitočné, ak chcete automaticky vykonávať kontrolu vstupu podľa typu databázy. | Žiadne <> |
Namespace | Priestor názvov, do ktorého patrí vygenerovaná trieda entít. Ak nie je zadaný, priestor názvov sa určí podľa priečinka. | TestNamespace |
Kontextový priestor názvov | Priestor názvov, do ktorého patrí vygenerovaný kontext. Ak nie je zadaný, priestor názvov sa určí podľa priečinka. | TestNamespace |
NoOnKonfigurácia | Vyhnite sa vkladaniu nespracovaných reťazcov pripojenia do kódu. | Žiadne <> |
NoPluralize | Vyhnite sa názvu vlastnosti v množnom čísle každého názvu tabuľky v kontexte. | Žiadne <> |
Stlačením klávesu Enter ho spustite a automaticky vygenerujte kód: Ak ide o chybu, zobrazí sa dôvod, preto odpovedzte podľa obsahu chyby.
user
Kód modelu tabuľky vyzerá takto:
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; }
}
Mimochodom, upozornenie sa zobrazí, pretože reťazec pripojenia je zapísaný tak, ako je v kóde vygenerovanej triedy kontextu. Ak je to možné, pripojovací reťazec by mal byť uložený na samostatnom mieste a nastavený za behu, ale tentoraz je to za účelom kontroly operácie, takže ho nechám tak, ako je.
Získanie záznamu a jeho zobrazenie
Teraz, keď máte kód na prístup k záznamom v databáze, skúsme záznamy získať a zobraziť ich v konzole.
Program.cs
a upravte ho nasledovne.
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));
}
Vygenerujte automaticky vygenerovanú triedu DbContext
new
pomocou . Deklaruje sa in, aby using var
sa pripojenie k databáze automaticky zničilo.
dbContext
vygeneroval vlastnosti na prístup ku každému modelu, takže tentoraz user
môžete manipulovať so záznamami v tabuľke prístupom User
k vlastnostiam.
Nemusíte vedieť o SQL kóde, ktorý sa vydáva, pretože sa automaticky generuje interne.
ToList
Tu používame user
metódu rozšírenia na získanie všetkých záznamov v tabuľke.
foreach
Potom použijem user
metódy a JsonSerializer.Serialize
na zobrazenie informácií v konzole.
Ako user
už bolo spomenuté vyššie, každý stĺpec v tabuľke je deklarovaný ako vlastnosť, takže je možné načítať hodnotu aj jednotlivo.