Sagatavošanās piekļuvei MySQL ar Entity Framework Core (vispirms datu bāze)
Darbības apstiprināšanas vide
- Vizuālā studija
-
- Vizuālā studija 2022
- .NETO
-
- .NET 8
- Entītiju struktūras kodols
-
- Entītiju struktūras kodols 8.0
- MySQL
-
- MySQL 8,4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Iepriekš minētais ir verifikācijas vide, taču tas var darboties arī citās versijās.
Sākumā
Entity Framework Core ir O/R kartētāju bibliotēka, kas ļauj piekļūt datu bāzes ierakstiem, izmantojot koda definētus modeļus (klases), tieši nerakstot SQL paziņojumus, piekļūstot datu bāzei. Tas nodrošina šādas priekšrocības:
- Neraksta SQL paziņojumus tieši, samazinot drošības riskus, piemēram, SQL injekciju
- Tā kā SQL priekšraksti ir virknes, pat ja tie kļūdās sintaksē, tie nav pakļauti būvēšanas kļūdu pārbaudei, bet, tā kā modelis ir programmas sintakse, to var pārbaudīt, vai nav kļūdu būvēšanas laikā.
Entity Framework Core automātiski ģenerē kodu, lai izveidotu savienojumu ar šiem modeļiem un datu bāzēm no esošajām datu bāzēm, Un otrādi, ir veids, kā manuāli rakstīt kodu un pēc tam automātiski ģenerēt datu bāzi.
Pirmo sauc par "datu bāzi vispirms", bet otro sauc par "kodu vispirms". Ir arī "modelis vispirms", kas ģenerē kodu un datu bāzes no projektiem, piemēram, ER diagrammām, bet tas netiek plaši izmantots Entity Framework Core.
Šoreiz mēs izmantosim "datu bāzes vispirms" modeli, kas ģenerē kodu, pieņemot, ka datu bāze jau pastāv.
MySQL iestatīšana
Šajā padomā pārliecinieties, ka iepriekš esat iestatījis MySQL, lai piekļūtu savai MySQL datu bāzei. To var iestatīt datorā izstrādes vidē vai citā datorā, izmantojot tīklu. Ja varat izveidot savienojumu ar MySQL no savas izstrādes vides, varat sākt. Šajā padomā mēs esam instalējuši MySQL citā vidē.
MySQL iestatīšanas darbības tiks izlaistas, jo tās būs liekas. Nākamajās lapās ir sniegti ar MySQL saistītie padomi par iestatīšanas darbībām.
Tabulas izveide
Šajā gadījumā mēs izveidosim šādu shēmu (datu bāzi) un tabulu kā paraugu.
- Shēmas nosaukums : test_schema
- Tabulas nosaukums : lietotājs
- Tabulas kolonnas: [id], [vārds], [parole], [vecums], [e-pasts], [dzimšanas diena], [is_provisional_registration], [update_datetime]
Nav svarīgi, kā jūs to rakstāt, bet, ja tas ir garlaicīgi, palaidiet un ģenerējiet šādu SQL pret MySQL:
Tālāk ir shēmas izveide SQL:
CREATE DATABASE `test_schema`;
Tabulas izveide ir 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='テストコメント';
Pievienojiet ierakstu 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');
Konta atļauju iestatīšana
Pārliecinieties, vai ir iestatīts resursdatora nosaukums, lai jūsu programmētais konts varētu piekļūt MySQL shēmai.
Jums ir arī jāiestata atļaujas, lai test_schema
piekļūtu kontam, ar kuru vēlaties izveidot savienojumu.
Šoreiz mēs veiksim SELECT
ierakstu izgūšanas procesu.
Šoreiz es to nedarīšu, bet, ja vēlaties INSERT
UPDATE
ievietot vai atjaunināt, lūdzu, pārbaudiet un .
Visual Studio iestatīšana
Pieņemot, ka jūs to jau esat iestatījis. Ja vēlaties uzzināt iestatīšanas procedūru, mēs to esam apkopojuši nākamajā lapā.
Projekta izveide
Entity Framework Core nav atkarīgs no konkrētas izpildes vides, tāpēc to var izmantot daudzos projektos. Šajā gadījumā mēs izmantosim Entity Framework Core vienkāršā konsoles lietojumprogrammu vidē.
Jaunajā projektā atlasiet Konsoles programma (atkarībā no tā, kas nav .NET Framework).
Jūs esat izveidojis projektu. Projekta nosaukums var būt jebkas.
Iegūt MySQL Entity Framework pamatpakotni
Iegūstiet pakotni, lai izmantotu Entity Framework Core ar NuGet. Iepakojumā izmanto: Tas nav oficiāls no Microsoft, bet tas tiek plaši izmantots.
- Pomelo.EntityFrameworkCore.MySql
Ar peles labo pogu noklikšķiniet uz atkarības un atlasiet Pārvaldīt NuGet pakotnes.
Kad cilnē ir atlasīta opcija "Pārlūkot", ierakstiet meklēšanas laukā Pomelo
. Tiks parādīts saistīto pakotņu saraksts.
Instalējiet šādas pakotnes:
- Pomelo.EntityFrameworkCore.MySql
Atlasiet to, ko vēlaties instalēt, un noklikšķiniet uz pogas Instalēt. Atlasiet jaunāko stabilo versijas versiju.
Dialogs būtībā ir labi un labi.
Es domāju, ka pakete ir šāda.
Pēc tam ierakstiet EntityFrameworkCore
meklēšanas laukā un instalējiet arī sekojošo.
- Microsoft.EntityFrameworkCore.Tools
Versijām atbilst versijai, Pomelo.EntityFrameworkCore.MySql
uz kuru atsaucas Microsoft.EntityFrameworkCore
.
Šoreiz mēs atsaucamies uz 8.0.2, tāpēc Microsoft.EntityFrameworkCore.Tools
padarīsim to arī par 8.0.2.
Šī pakotne tiek izmantota, lai ģenerētu kodu no datu bāzes.
Galu galā tam vajadzētu izskatīties šādi:
Modeļa (koda) izveide no datu bāzes tabulas konfigurācijas
Lai modelis un cits kods tiktu ģenerēts automātiski, vispirms ir jāizveido projekts, lai pārliecinātos, ka nav kļūdu. Ja rodas kļūda, modelis neizdosies. Ja jūs jau esat pārliecinājies, ka nav kļūdu, jums nav nepieciešams veidot.
Atveriet pakotņu pārvaldnieka konsoli no Visual Studio. Ja nē, varat to atvērt no izvēlnes Rīki, NuGet pakotņu pārvaldnieks un Pakotņu pārvaldnieka konsole.
Jūs redzēsiet logu, piemēram, zemāk, tāpēc pārliecinieties, ka augšējā labajā stūrī esošais "Noklusējuma projekts" ir projekts, kuram vēlaties izveidot modeli. (Jums jābūt uzmanīgiem, ja jums ir vairāki projekti)
Ievades laukā ievadiet šādu tekstu: Parametri mainīsies atkarībā no vides, tāpēc, lūdzu, nomainiet tos savlaicīgi, pamatojoties uz tālāk sniegtajiem paskaidrojumiem.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Ievades piemērs
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parametru | skaidrojuma | parametra piemērs |
---|---|---|
Sniedzējs | Ja tas ir Pomelo.EntityFrameworkCore.MySql MySQL, norādiet, piemēram. |
Pomelo.EntityFrameworkCore.MySql |
Sakars | Šī ir savienojuma virkne, lai izveidotu savienojumu ar datu bāzi. Savienojuma virkni var izmantot citās lietotnēs, tāpēc, lūdzu, rakstiet norādīto saturu atbilstoši savienojuma virknes apzīmējumam. Starp citu, tas tiek izmantots tikai īslaicīgi, lai izveidotu modeli, tāpēc pēc šīs savienojuma virknes programmas publicēšanas nav jāapzinās drošība. Ja jūsu parolē ir simbols, esiet uzmanīgs, lai aizbēgtu. | "Serveris = Testa serveris; Datu bāze=test_schema; lietotājs=testa lietotājs; parole=XXXXXXXX;" |
f | Piespiedu pārrakstīšana pat tad, ja jums jau ir programma. | Nav <> |
OutputDir | Mapes ceļš, lai izvadītu kodu. Relatīvais ceļš no projekta mapes | Modeļi\Datu bāze |
Kontekstā | Konteksta klašu nosaukumi, izmantojot Entity Framework | TestDatabaseDbContext |
UseDatabaseNames | Ja norādīts, tabulas nosaukums datu bāzē būs klases nosaukums tāds, kāds tas ir. Ja nē, vienības klases nosaukums tiek koriģēts saskaņā ar noteikumiem. | Nav <> |
Datu anotācijas | Ja norādīts, kolonnas tips automātiski pievieno atribūtu DataAnnotation katram rekvizītam. Tas ir mazliet noderīgi, ja vēlaties automātiski veikt ievades pārbaudi atbilstoši datu bāzes tipam. | Nav <> |
Namespace | Nosaukumvieta, kurai pieder ģenerētā entītiju klase. Ja tas nav norādīts, nosaukumvieta tiek noteikta atbilstoši mapei. | Testa nosaukumvieta |
Konteksta nosaukumvieta | Nosaukumvieta, kurai pieder ģenerētais konteksts. Ja tas nav norādīts, nosaukumvieta tiek noteikta atbilstoši mapei. | Testa nosaukumvieta |
NoOnConfiguring | Izvairieties no neapstrādātu savienojuma virkņu iegulšanas savā kodā. | Nav <> |
NoPluralize | Izvairieties no katra tabulas nosaukuma daudzskaitļa rekvizīta nosaukuma kontekstā. | Nav <> |
Nospiediet taustiņu Enter, lai to palaistu un automātiski ģenerētu kodu: Ja tā ir kļūda, tiks parādīts iemesls, tāpēc, lūdzu, atbildiet atbilstoši kļūdas saturam.
user
Tabulas modeļa kods izskatās šādi:
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; }
}
Starp citu, brīdinājums tiek parādīts, jo savienojuma virkne ir rakstīta tā, kā tas ir ģenerētās konteksta klases kodā. Ja iespējams, savienojuma virkne jāglabā atsevišķā vietā un jāiestata izpildlaikā, bet šoreiz tas ir paredzēts, lai pārbaudītu darbību, tāpēc es to atstāšu tādu, kāds tas ir.
Ieraksta iegūšana un skatīšana
Tagad, kad jums ir kods, lai piekļūtu datu bāzes ierakstiem, mēģināsim iegūt ierakstus un parādīt tos konsolē.
Program.cs
un modificējiet to šādi.
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));
}
Ģenerējiet automātiski ģenerēto klasinew
, DbContext
izmantojot . Tas tiek deklarēts, lai datu using var
bāzes savienojumu varētu automātiski iznīcināt.
dbContext
ir ģenerējis rekvizītus, lai piekļūtu katram modelim, tāpēc šoreiz user
varat manipulēt ar tabulas User
ierakstiem, piekļūstot rekvizītiem.
Jums nav jāzina par izsniegto SQL, jo tas tiek automātiski ģenerēts iekšēji.
ToList
Šeit mēs izmantojam user
paplašinājuma metodi, lai iegūtu visus tabulā esošos ierakstus.
foreach
Pēc tam es izmantoju user
un JsonSerializer.Serialize
metodes, lai parādītu informāciju konsolē.
Kā user
minēts iepriekš, katra tabulas kolonna ir deklarēta kā rekvizīts, tāpēc vērtību ir iespējams izgūt arī atsevišķi.