Sagatavošanās piekļuvei MySQL ar Entity Framework Core (vispirms datu bāze)

Lapas izveides datums :

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.