Pasirengimas prieigai prie "MySQL" naudojant "Entity Framework Core" (pirmiausia duomenų bazė)
Operacijos patvirtinimo aplinka
- Vizualinė studija
-
- Vizualinė studija 2022 m
- .GRYNOJI
-
- .NET 8
- Objekto struktūros branduolys
-
- "Entity Framework Core 8.0"
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Aukščiau pateikta patvirtinimo aplinka, tačiau ji gali veikti ir kitose versijose.
Iš pradžių
Entity Framework Core yra O/R žemėlapių biblioteka, leidžianti pasiekti duomenų bazės įrašus naudojant kodu apibrėžtus modelius (klases) tiesiogiai nerašant SQL sakinių prisijungiant prie duomenų bazės. Tai suteikia šiuos privalumus:
- Nerašo SQL sakinių tiesiogiai, sumažindamas saugumo riziką, pvz., SQL injekciją
- Kadangi SQL sakiniai yra eilutės, net jei jie padaro sintaksės klaidą, jie nėra tikrinami, ar nėra kūrimo klaidų, tačiau kadangi modelis yra programos sintaksė, jį galima patikrinti, ar nėra klaidų kūrimo metu.
Entity Framework Core automatiškai generuoja kodą, kad prisijungtų prie šių modelių ir duomenų bazių iš esamų duomenų bazių, Ir atvirkščiai, yra būdas rankiniu būdu parašyti kodą ir automatiškai sugeneruoti duomenų bazę.
Pirmasis vadinamas "duomenų bazės pirmiausia", o antrasis - "kodas pirmas". Taip pat yra "modelis", kuris generuoja kodą ir duomenų bazes iš brėžinių, pvz., ER diagramų, tačiau jis nėra plačiai naudojamas "Entity Framework Core".
Šį kartą naudosime "duomenų bazės pirmiausia" modelį, kuris generuoja kodą darant prielaidą, kad duomenų bazė jau egzistuoja.
MySQL sąranka
Šiame patarime įsitikinkite, kad iš anksto nustatėte MySQL, kad galėtumėte pasiekti savo MySQL duomenų bazę. Jį galima nustatyti kompiuteryje kūrimo aplinkoje arba kitame kompiuteryje per tinklą. Jei galite prisijungti prie MySQL iš savo kūrimo aplinkos, galite pradėti. Šiame patarime įdiegėme "MySQL" kitoje aplinkoje.
MySQL sąrankos veiksmai bus praleisti, nes jie bus nereikalingi. Tolesniuose puslapiuose pateikiami su MySQL susiję sąrankos veiksmų patarimai.
Lentelės kūrimas
Tokiu atveju kaip pavyzdį sukursime šią schemą (duomenų bazę) ir lentelę.
- Schemos pavadinimas : test_schema
- Lentelės pavadinimas : vartotojas
- Lentelės stulpeliai: [id], [vardas], [slaptažodis], [amžius], [el. paštas], [gimtadienis], [is_provisional_registration], [update_datetime]
Nesvarbu, kaip jį rašote, bet jei tai vargina, paleiskite ir sugeneruokite šį SQL prieš MySQL:
Toliau pateikiamas schemos kūrimas SQL:
CREATE DATABASE `test_schema`;
Lentelės kūrimas yra 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='テストコメント';
Įtraukite įrašą į 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');
Paskyros leidimų nustatymas
Įsitikinkite, kad nustatėte pagrindinio kompiuterio pavadinimą, kad jūsų programuojama paskyra galėtų pasiekti MySQL schemą.
Taip pat turite nustatyti leidimus test_schema
pasiekti paskyrą, prie kurios norite prisijungti.
Šį kartą atliksime SELECT
įrašų gavimo procesą.
Šį kartą to nedarysiu, bet jei norite INSERT
UPDATE
įterpti ar atnaujinti, pažymėkite ir .
"Visual Studio" sąranka
Darant prielaidą, kad jūs jau jį taip pat nustatėte. Jei norite sužinoti sąrankos procedūrą, mes ją apibendrinome kitame puslapyje.
Sukurkite projektą
"Entity Framework Core" nepriklauso nuo konkrečios vykdymo aplinkos, todėl ją galima naudoti daugelyje projektų. Tokiu atveju naudosime "Entity Framework Core" paprastoje konsolės programų aplinkoje.
Naujame projekte pasirinkite Konsolės programa (atsižvelgiant į tai, kas nėra .NET Framework).
Jūs sukūrėte projektą. Projekto pavadinimas gali būti bet koks.
Gaukite "Entity Framework Core" paketą, skirtą "MySQL"
Gaukite paketą, kad galėtumėte naudoti "Entity Framework Core" su "NuGet". Pakuotėje naudojami: Tai nėra oficiali "Microsoft", tačiau ji plačiai naudojama.
- Pomelo.EntityFrameworkCore.MySql
Dešiniuoju pelės mygtuku spustelėkite priklausomybę ir pasirinkite Tvarkyti NuGet paketus.
Skirtuke pasirinkę "Naršyti", įveskite paieškos laukelį Pomelo
. Bus rodomas susijusių paketų sąrašas.
Iš to įdiekite šiuos paketus:
- Pomelo.EntityFrameworkCore.MySql
Pasirinkite, ką norite įdiegti, ir spustelėkite mygtuką Įdiegti. Pasirinkite naujausią stabilią versijos versiją.
Dialogas iš esmės yra gerai ir gerai.
Manau, kad paketas yra toks.
Tada įveskite EntityFrameworkCore
paieškos laukelį ir įdiekite šiuos dalykus.
- Microsoft.EntityFrameworkCore.Tools
Jei naudojate versijas, Pomelo.EntityFrameworkCore.MySql
suderinkite su versija, kurią nurodo Microsoft.EntityFrameworkCore
.
Šį kartą mes kalbame apie 8.0.2, todėl Microsoft.EntityFrameworkCore.Tools
padarykime jį ir 8.0.2.
Šis paketas naudojamas generuoti kodą iš duomenų bazės.
Galų gale tai turėtų atrodyti taip:
Modelio (kodo) kūrimas iš duomenų bazės lentelės konfigūracijos
Norėdami, kad modelis ir kitas kodas būtų sugeneruoti automatiškai, pirmiausia turite sukurti projektą, kad įsitikintumėte, jog nėra klaidų. Jei įvyks klaida, modelis suges. Jei jau patikrinote, ar nėra klaidų, jums nereikia kurti.
Atidarykite paketų tvarkyklės konsolę iš "Visual Studio". Jei ne, galite jį atidaryti iš meniu Įrankiai, NuGet paketų tvarkyklė ir Paketų tvarkyklės konsolė.
Pamatysite tokį langą kaip žemiau, todėl įsitikinkite, kad viršutiniame dešiniajame kampe esantis "Numatytasis projektas" yra projektas, kuriam norite sukurti modelį. (Turite būti atsargūs, jei turite kelis projektus)
Įvesties lauke įveskite šį tekstą: Parametrai keisis priklausomai nuo aplinkos, todėl pakeiskite juos laiku, remdamiesi toliau pateiktais paaiškinimais.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Įvesties pavyzdys
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parametro | paaiškinimas | Parametro pavyzdys |
---|---|---|
Teikėjas | Jei tai MySQL Pomelo.EntityFrameworkCore.MySql , nurodykite pvz. |
Pomelo.EntityFrameworkCore.MySql |
Ryšys | Tai ryšio eilutė, skirta prisijungti prie duomenų bazės. Ryšio eilutę galima naudoti kitose programose, todėl parašykite nurodytą turinį pagal ryšio eilutės žymėjimą. Beje, jis naudojamas tik laikinai modeliui kurti, todėl paskelbus šios ryšio eilutės programą nereikia žinoti apie saugumą. Jei slaptažodyje yra simbolis, būkite atsargūs dėl pabėgimo. | "Server=TestServer; Duomenų bazė = test_schema; vartotojas=bandomasis vartotojas; slaptažodis=XXXXXXXX;" |
f | Priverstinai perrašyti, net jei jau turite programą. | Nėra <> |
IšvestisDir | Aplanko kelias, kuriame bus išvestas kodas. Santykinis kelias iš projekto aplanko | Modeliai\Duomenų bazė |
Kontekste | Konteksto klasių pavadinimai naudojant objektų sistemą | TestDatabaseDbContext |
UseDatabaseNames | Jei nurodyta, lentelės pavadinimas duomenų bazėje bus toks, koks yra. Jei ne, subjekto klasės pavadinimo atvejis koreguojamas pagal taisykles. | Nėra <> |
Duomenų komentarai | Jei nurodyta, stulpelio tipas automatiškai prideda atributą DataAnnotation prie kiekvienos ypatybės. Tai šiek tiek naudinga, jei norite automatiškai atlikti įvesties tikrinimą pagal duomenų bazės tipą. | Nėra <> |
Namespace | Vardų sritis, kuriai priklauso sugeneruota objekto klasė. Jei nenurodyta, vardų sritis nustatoma pagal aplanką. | Testo vardų sritis |
Konteksto vardų sritis | Vardų sritis, kuriai priklauso sugeneruotas kontekstas. Jei nenurodyta, vardų sritis nustatoma pagal aplanką. | Testo vardų sritis |
NoOnConfiguring | Venkite į kodą įterpti neapdorotų ryšio eilučių. | Nėra <> |
NoPliuralizuoti | Venkite kiekvieno lentelės pavadinimo daugiskaitos ypatybės pavadinimo kontekste. | Nėra <> |
Paspauskite Enter, kad jį paleistumėte ir automatiškai sugeneruotumėte kodą: Jei tai klaida, bus rodoma priežastis, todėl atsakykite pagal klaidos turinį.
user
Lentelės modelio kodas atrodo taip:
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; }
}
Beje, įspėjimas rodomas, nes ryšio eilutė parašyta tokia, kokia ji yra sugeneruotos konteksto klasės kode. Jei įmanoma, ryšio eilutę reikia laikyti atskiroje vietoje ir nustatyti vykdymo metu, tačiau šį kartą ji skirta operacijai patikrinti, todėl paliksiu ją tokią, kokia yra.
Įrašo gavimas ir peržiūra
Dabar, kai turite kodą, kad galėtumėte pasiekti duomenų bazės įrašus, pabandykime gauti įrašus ir rodyti juos konsolėje.
Program.cs
ir pakeiskite jį taip.
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));
}
Generuokite DbContext
automatiškai sugeneruotą klasę new
naudodami . Jis deklaruojamas, kad using var
duomenų bazės ryšys būtų automatiškai sunaikintas.
dbContext
sugeneravo ypatybes, kad galėtumėte pasiekti kiekvieną modelį, todėl šį kartą user
galite manipuliuoti lentelės User
įrašais pasiekdami ypatybes.
Jums nereikia žinoti apie išduodamą SQL, nes jis automatiškai sugeneruojamas viduje.
ToList
Čia mes naudojame user
išplėtimo metodą, kad gautume visus lentelės įrašus.
foreach
Po to naudoju user
ir JsonSerializer.Serialize
metodus, kad parodyčiau informaciją konsolėje.
Kaip user
minėta aukščiau, kiekvienas lentelės stulpelis deklaruojamas kaip ypatybė, todėl vertę taip pat galima nuskaityti atskirai.