Příprava přístupu k MySQL pomocí Entity Framework Core (nejprve databáze)
Prostředí pro potvrzení provozu
- Vizuální studio
-
- Visual Studio 2022
- .SÍŤ
-
- .NET 8
- Jádro Entity Frameworku
-
- Entity Framework Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Výše uvedené je ověřovací prostředí, ale může fungovat i v jiných verzích.
Nejprve
Entity Framework Core je knihovna O/R mapperů, které umožňují přístup k databázovým záznamům prostřednictvím kódem definovaných modelů (tříd) bez přímého psaní příkazů SQL při přístupu k databázi. To přináší následující výhody:
- Nepíše příkazy SQL přímo, čímž snižuje bezpečnostní rizika, jako je například injektáž SQL
- Vzhledem k tomu, že příkazy SQL jsou řetězce, i když udělají chybu v syntaxi, nepodléhají kontrole chyb sestavení, ale protože model je syntaxe programu, lze jej zkontrolovat na chyby v době sestavení.
Entity Framework Core automaticky generuje kód pro připojení k těmto modelům a databázím z existujících databází. Naopak existuje způsob, jak ručně napsat kód a poté automaticky vygenerovat databázi.
První se nazývá "database-first" a druhý se nazývá "code-first". K dispozici je také "model-first", který generuje kód a databáze z plánů, jako jsou diagramy ER, ale v Entity Framework Core se široce nepoužívá.
Tentokrát použijeme vzor "database-first", který generuje kód za předpokladu, že databáze již existuje.
Nastavení MySQL
V tomto tipu se ujistěte, že jste si předem nastavili MySQL pro přístup k databázi MySQL. Lze ji nastavit na PC ve vašem vývojovém prostředí nebo na jiném PC přes síť. Pokud se můžete připojit k MySQL ze svého vývojového prostředí, můžete začít. V tomto tipu jsme nainstalovali MySQL v jiném prostředí.
Kroky nastavení MySQL budou vynechány, protože budou nadbytečné. Následující stránky obsahují tipy týkající se MySQL pro kroky nastavení.
Vytvoření tabulky
V tomto případě vytvoříme následující schéma (databázi) a tabulku jako ukázku.
- Název schématu : test_schema
- Název tabulky : uživatel
- Sloupce tabulky: [id], [jméno], [heslo], [věk], [e-mail], [narozeniny], [is_provisional_registration], [update_datetime]
Nezáleží na tom, jak to napíšete, ale pokud je to zdlouhavé, spusťte a vygenerujte následující SQL proti MySQL:
Následuje SQL pro vytvoření schématu:
CREATE DATABASE `test_schema`;
Vytváření tabulek 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='テストコメント';
Přidejte 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');
Nastavení oprávnění pro váš účet
Ujistěte se, že máte nastavený název hostitele, aby účet, který programujete, měl přístup ke schématu MySQL.
Musíte také nastavit oprávnění pro přístup k test_schema
účtu, ke kterému se chcete připojit.
Tentokrát provedeme SELECT
proces načítání záznamů.
Tentokrát to neudělám, ale pokud chcete INSERT
UPDATE
vložit nebo aktualizovat, zkontrolujte prosím a .
Instalace sady Visual Studio
Za předpokladu, že jste to již také nastavili. Pokud chcete znát postup nastavení, shrnuli jsme jej na následující stránce.
Vytvoření projektu
Entity Framework Core nezávisí na konkrétním spouštěcím prostředí, takže jej lze použít v mnoha projektech. V tomto případě použijeme Entity Framework Core v prostředí jednoduché konzolové aplikace.
V novém projektu vyberte Konzolová aplikace (podle toho, co není .NET Framework).
Vytvořili jste projekt. Název projektu může být jakýkoliv.
Získání balíčku Entity Framework Core pro MySQL
Získejte balíček pro použití Entity Framework Core s NuGetem. Balíček používá: To není oficiální od společnosti Microsoft, ale je široce používáno.
- Pomelo.EntityFrameworkCore.MySql
Klikněte pravým tlačítkem na závislost a vyberte Spravovat balíčky NuGet.
Na kartě vyberte možnost "Procházet" a do vyhledávacího pole Pomelo
zadejte text . Zobrazí se seznam souvisejících balíčků.
Nainstalujte následující balíčky z tohoto:
- Pomelo.EntityFrameworkCore.MySql
Vyberte, co chcete nainstalovat, a klikněte na tlačítko Instalovat. Vyberte nejnovější stabilní verzi pro danou verzi.
Dialogové okno je v zásadě v pořádku.
Myslím, že balíček je následující.
Poté zadejte EntityFrameworkCore
do vyhledávacího pole a nainstalujte také následující.
- Nástroje Microsoft.EntityFrameworkCore.Tools
U verzí porovnejte verzi, Pomelo.EntityFrameworkCore.MySql
na kterou Microsoft.EntityFrameworkCore
odkazuje .
Tentokrát máme na mysli verzi 8.0.2, takže Microsoft.EntityFrameworkCore.Tools
ji udělejme také 8.0.2.
Tento balíček se používá ke generování kódu z databáze.
Nakonec by to mělo vypadat takto:
Vytvoření modelu (kódu) z konfigurace databázové tabulky
Chcete-li, aby se váš model a další kód automaticky generovaly, musíte nejprve sestavit projekt, abyste se ujistili, že nedochází k žádným chybám. Pokud dojde k chybě, model selže. Pokud jste již ověřili, že neexistují žádné chyby, nemusíte sestavovat.
Otevřete konzolu Správce balíčků ze sady Visual Studio. Pokud ne, můžete jej otevřít z nabídky Nástroje, Správce balíčků NuGet a Konzoly správce balíčků.
Zobrazí se okno podobné tomu níže, takže se ujistěte, že "Výchozí projekt" v pravém horním rohu je projekt, pro který chcete model vytvořit. (Pokud máte více projektů, musíte být opatrní)
Do vstupního pole zadejte následující text: Parametry se budou měnit v závislosti na prostředí, proto je prosím změňte včas na základě následujících vysvětlení.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Pří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
Vysvětlení parametru | Příklad parametru | |
---|---|---|
Poskytovatel | Pokud se jedná o Pomelo.EntityFrameworkCore.MySql MySQL, určete například. |
Pomelo.EntityFrameworkCore.MySql |
Připojení | Toto je připojovací řetězec pro připojení k databázi. Připojovací řetězec lze použít v jiných aplikacích, proto zapište zadaný obsah podle zápisu připojovacího řetězce. Mimochodem, používá se pouze dočasně k vytvoření modelu, takže po publikování aplikace pro tento připojovací řetězec není třeba si být vědom zabezpečení. Pokud máte v hesle symbol, dejte si pozor na únik. | "Server=Testovací_server; databáze=test_schema; user=test-uživatel; heslo=XXXXXXXX;" |
f | Vynutit přepsání, i když již program máte. | Žádná <> |
VýstupníDir | Cesta ke složce pro výstup kódu. Relativní cesta ze složky projektu | Modely\Databáze |
Kontext | Názvy kontextových tříd při použití Entity Frameworku | Kontext testovací databázeDbContext |
UseDatabaseNames | Pokud je zadáno, název tabulky v databázi bude název třídy tak, jak je. Pokud ne, velikost písmen názvu třídy entity se upraví podle pravidel. | Žádná <> |
Datové poznámky | Pokud je zadaný, typ sloupce automaticky připojí atribut DataAnnotation ke každé vlastnosti. To je trochu užitečné, pokud chcete automaticky provádět kontrolu vstupů podle typu databáze. | Žádná <> |
Namespace | Obor názvů, do kterého vygenerovaná třída entity patří. Pokud není zadaný, obor názvů se určí podle složky. | Obor názvů testů |
ContextNamespace | Obor názvů, do kterého vygenerovaný kontext patří. Pokud není zadaný, obor názvů se určí podle složky. | Obor názvů testů |
NoOnKonfigurace | Vyhněte se vkládání nezpracovaných připojovacích řetězců do kódu. | Žádná <> |
Bez množného čísla | Vyhněte se názvu vlastnosti v množném čísle každého názvu tabulky v Context. | Žádná <> |
Stisknutím klávesy Enter jej spusťte a automaticky vygenerujte kód: Pokud se jedná o chybu, zobrazí se důvod, proto prosím reagujte podle obsahu chyby.
user
Kód modelu pro tabulku vypadá 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; }
}
Mimochodem, varování se zobrazí, protože připojovací řetězec je zapsán tak, jak je v kódu vygenerované kontextové třídy. Pokud je to možné, připojovací řetězec by měl být uložen na samostatném místě a nastaven za běhu, ale tentokrát je to za účelem kontroly operace, takže to nechám tak, jak to je.
Získejte záznam a zobrazte jej
Teď, když máte kód pro přístup k záznamům v databázi, zkusme získat záznamy a zobrazit je v konzole.
Program.cs
a upravte jej následovně.
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 generovanou třídu DbContext
new
pomocí . Je deklarován in, aby bylo možné using var
automaticky zničit připojení k databázi.
dbContext
vygeneroval vlastnosti pro přístup ke každému modelu, takže tentokrát user
můžete manipulovat se záznamy v tabulce pomocí User
přístupu k vlastnostem.
Nemusíte vědět o vydaném SQL, protože je automaticky generován interně.
ToList
Zde používáme user
rozšiřující metodu k získání všech záznamů v tabulce.
foreach
Poté používám user
metody a JsonSerializer.Serialize
k zobrazení informací v konzoli.
Jak user
již bylo zmíněno výše, každý sloupec v tabulce je deklarován jako vlastnost, je tedy možné hodnotu načíst i jednotlivě.