Felkészülés a MySQL elérésére az Entity Framework Core használatával (adatbázis-első)
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ő.