Felkészülés a MySQL elérésére az Entity Framework Core használatával (adatbázis-első)

Oldal létrehozásának dátuma :

Művelet-megerősítő környezet

Visual Studio
  • Visual Studio 2022
.HÁLÓ
  • .NET 8
Entitás-keretrendszer alapja
  • Entitás-keretrendszer Core 8.0
MySQL
  • MySQL 8.4
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

*A fenti egy ellenőrző környezet, de más verziókban is működhet.

Először

Az Entity Framework Core egy O/R-leképezők könyvtára, amely lehetővé teszi az adatbázisrekordok elérését kód által definiált modelleken (osztályokon) keresztül anélkül, hogy közvetlenül SQL-utasításokat írna az adatbázis elérésekor. Ez a következő előnyökkel jár:

  • Nem ír közvetlenül SQL-utasításokat, csökkentve a biztonsági kockázatokat, például az SQL-injektálást
  • Mivel az SQL utasítások sztringek, még ha hibát is követnek el a szintaxisban, nem ellenőrzik őket a buildelési hibákban, de mivel a modell egy programszintaxis, a buildeléskor ellenőrizhető a hibák.

Az Entity Framework Core automatikusan létrehoz kódot, amely csatlakozik ezekhez a modellekhez és adatbázisokhoz a meglévő adatbázisokból, Ezzel szemben van mód a kód manuális írására, majd az adatbázis automatikus létrehozására.

Az előbbit "adatbázis-elsőnek", az utóbbit pedig "kód-elsőnek" nevezik. Létezik olyan "model-first" is, amely kódot és adatbázisokat generál tervrajzokból, például ER-diagramokból, de az Entity Framework Core-ban nem használják széles körben.

Ezúttal egy "adatbázis-első" mintát fogunk használni, amely kódot hoz létre azzal a feltételezéssel, hogy egy adatbázis már létezik.

MySQL beállítás

Ebben a tippben győződjön meg arról, hogy előzetesen beállította a MySQL-t a MySQL adatbázis eléréséhez. Beállítható a fejlesztői környezetben lévő számítógépen vagy egy másik számítógépen a hálózaton keresztül. Ha a fejlesztői környezetből tud csatlakozni a MySQL-hez, akkor már mehet is. Ebben a tippben a MySQL-t egy másik környezetbe telepítettük.

A MySQL beállítási lépései kimaradnak, mivel redundánsak lesznek. A következő oldalak MySQL-lel kapcsolatos tippeket tartalmaznak a beállítási lépésekhez.

Tábla létrehozása

Ebben az esetben a következő sémát (adatbázist) és táblát hozzuk létre mintaként.

  • Séma neve : test_schema
  • Tábla neve : felhasználó
  • Táblázat oszlopai: [azonosító], [név], [jelszó], [életkor], [e-mail], [születésnap], [is_provisional_registration], [update_datetime]

Nem számít, hogyan írja, de ha unalmas, futtassa és generálja a következő SQL-t a MySQL-en:

A sémakészítés SQL-je a következő:

CREATE DATABASE `test_schema`;

A tábla létrehozása 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='テストコメント';

Rekord hozzáadása az SQL-hez.

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');

Engedélyek beállítása a fiókhoz

Győződjön meg arról, hogy be van állítva egy állomásnév, hogy a programozott fiók hozzáférhessen a MySQL sémához.

Engedélyeket kell beállítania ahhoz a fiókhoz való hozzáféréshez test_schema is, amelyhez csatlakozni szeretne.

Ezúttal a rekordok visszakeresésének folyamatát hajtjuk végre SELECT . Ezúttal nem fogom megtenni, de ha INSERT UPDATE be akarsz szúrni vagy frissíteni szeretnéd, kérlek ellenőrizd a és a .

A Visual Studio telepítése

Feltéve, hogy már beállította. Ha szeretné megismerni a beállítási eljárást, a következő oldalon összefoglaltuk.

Projekt létrehozása

Az Entity Framework Core nem függ egy adott végrehajtási környezettől, így számos projektben használható. Ebben az esetben az Entity Framework Core-t egy egyszerű konzolalkalmazás-környezetben fogjuk használni.

Az új projektben válassza a Konzolalkalmazás lehetőséget (amelyik nem .NET keretrendszer).

Ön létrehozta a projektet. A projekt neve bármi lehet.

A MySQL-hez készült Entity Framework Core-csomag beszerzése

Szerezzen be egy csomagot az Entity Framework Core NuGettel való használatához. A csomag a következőket használja: Ez nem hivatalos a Microsofttól, de széles körben használják.

  • Pomelo.EntityFrameworkCore.MySql

Kattintson a jobb gombbal a függőségre, és válassza a NuGet-csomagok kezelése lehetőséget.

A lapon a "Tallózás" kiválasztásával írja be a keresőmezőbe Pomelo . Megjelenik a kapcsolódó csomagok listája.

Telepítse a következő csomagokat innen:

  • Pomelo.EntityFrameworkCore.MySql

Válassza ki a telepíteni kívánt elemet, majd kattintson a Telepítés gombra. Válassza ki a verzió legújabb stabil verzióját.

A párbeszédablak alapvetően rendben van és rendben van.

Szerintem a csomag a következő.

Ezután írja be EntityFrameworkCore a keresőmezőbe, és telepítse a következőket is.

  • Microsoft.EntityFrameworkCore.Tools

Verziók Pomelo.EntityFrameworkCore.MySql esetén egyezzen meg a Microsoft.EntityFrameworkCore . Ezúttal a 8.0.2-re utalunk, tehát Microsoft.EntityFrameworkCore.Tools tegyük 8.0.2-re is. Ez a csomag kód létrehozására szolgál az adatbázisból.

Végül így kell kinéznie:

Modell (kód) létrehozása adatbázistábla-konfigurációból

Ahhoz, hogy a modell és más kód automatikusan létrejöjjön, először el kell készítenie a projektet, hogy megbizonyosodjon arról, hogy nincsenek hibák. Ha hiba történik, a modell meghibásodik. Ha már ellenőrizte, hogy nincsenek-e hibák, akkor nem kell építenie.

Nyissa meg a Csomagkezelő konzolt a Visual Studióból. Ha nem, akkor az Eszközök, a NuGet Csomagkezelő és a Csomagkezelő konzol menüből nyithatja meg.

Az alábbihoz hasonló ablak jelenik meg, ezért győződjön meg arról, hogy a jobb felső sarokban található "Alapértelmezett projekt" az a projekt, amelyhez modellt szeretne létrehozni. (Óvatosnak kell lenned, ha több projekted van)

Írja be a következő szöveget a beviteli mezőbe: A paraméterek a környezettől függően változnak, ezért kérjük, időben változtassa meg őket az alábbi magyarázatok alapján.

Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize

Bemeneti példa

Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Paraméter magyarázata Paraméter példa
Szolgáltató Ha MySQL Pomelo.EntityFrameworkCore.MySql , adja meg például. Pomelo.EntityFrameworkCore.MySql
Kapcsolat Ez az adatbázishoz való csatlakozáshoz szükséges kapcsolati sztring. A kapcsolati karakterlánc más alkalmazásokban is használható, ezért kérjük, írja meg a megadott tartalmat a kapcsolati karakterlánc jelölése szerint. Egyébként csak ideiglenesen használják egy modell létrehozására, így nem kell tisztában lenni a biztonsággal, miután közzétette az alkalmazást ehhez a kapcsolati sztringhez. Ha szimbólum van a jelszavadban, vigyázz a meneküléssel. "Szerver=Tesztszerver; Adatbázis=test_schema; user=teszt-felhasználó; jelszó=XXXXXXXX;"
f Kényszerítse felülírását, még akkor is, ha már rendelkezik programmal. Nincs <>
Kimeneti Dir A kód kimenetéhez szükséges mappa elérési útja. Relatív elérési út a projektmappából Modellek\Adatbázis
Kontextus Környezeti osztálynevek az Entity Framework használatakor TestDatabaseDbContext
UseDatabaseNames Ha meg van adva, az adatbázisban a tábla neve az osztály neve lesz. Ha nem, akkor az entitásosztály nevének kis- és nagybetűi a szabályoknak megfelelően módosulnak. Nincs <>
Adatjegyzetek Ha meg van adva, az oszloptípus automatikusan hozzáfűzi a DataAnnotation attribútumot az egyes tulajdonságokhoz. Ez egy kicsit hasznos, ha automatikusan szeretné elvégezni a bemeneti ellenőrzést az adatbázis típusának megfelelően. Nincs <>
Namespace Az a névtér, amelyhez a létrehozott entitásosztály tartozik. Ha nincs megadva, a névtér meghatározása a mappa szerint történik. TestNamespace
ContextNamespace Az a névtér, amelyhez a létrehozott környezet tartozik. Ha nincs megadva, a névtér meghatározása a mappa szerint történik. TestNamespace
NoOnConfiguring Kerülje a nyers kapcsolati sztringek beágyazását a kódba. Nincs <>
NoPluralize Kerülje az egyes táblanevek többes számú tulajdonságnevét a Környezetben. Nincs <>

Nyomja meg az Enter billentyűt a futtatáshoz és a kód automatikus létrehozásához: Ha hiba, akkor az ok megjelenik, ezért kérjük, válaszoljon a hiba tartalmának megfelelően.

user A táblázat modellkódja így néz ki:

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; }
}

A figyelmeztetés egyébként azért jelenik meg, mert a kapcsolati karakterlánc úgy van megírva, mint a generált környezeti osztály kódjában. Ha lehetséges, a kapcsolati karakterláncot külön helyen kell tárolni és futásidőben beállítani, de ezúttal a működés ellenőrzése céljából van, ezért hagyom úgy, ahogy van.

Szerezzen be egy rekordot és tekintse meg

Most, hogy megvan a kód az adatbázis rekordjainak eléréséhez, próbáljuk meg lekérni a rekordokat, és megjeleníteni őket a konzolon.

Program.cs és módosítsa az alábbiak szerint.

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));
}

Hozza létre az automatikusan generált osztályt DbContext new a paranccsal. A rendszer deklarálja, hogy lehetővé tegye using var az adatbázis-kapcsolat automatikus megsemmisítését.

dbContext tulajdonságokat generált az egyes modellek eléréséhez, így ezúttal user a User tulajdonságok elérésével módosíthatja a tábla rekordjait. Nem kell tisztában lennie a kiadott SQL-lel, mert az automatikusan létrejön belsőleg.

ToList Itt egy kiterjesztési módszert használunk user a táblázatban szereplő összes rekord lekéréséhez.

foreach Ezt követően user a és JsonSerializer.Serialize metódusokkal jelenítem meg az információkat a konzolon. Mint user fentebb említettük, a tábla minden oszlopa tulajdonságként van deklarálva, így az érték egyenként is lekérhető.