Prepareu-vos per accedir al MySQL amb l'Entity Framework Core (base de dades primer)

Data de creació de la pàgina :

Entorn de confirmació d'operació

Visual Studio
  • Visual Studio 2022
.XARXA
  • .NET 8
Nucli de l'Entity Framework
  • Entity Framework Core 8.0
MySQL
  • MySQL 04/08
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

*L'anterior és un entorn de verificació, però pot funcionar en altres versions.

Al principi

Entity Framework Core és una biblioteca d'assignadors O/R que us permeten accedir als registres de la base de dades mitjançant models definits per codi (classes) sense escriure directament sentències SQL quan accediu a la base de dades. Això proporciona els següents avantatges:

  • No escriu sentències SQL directament, reduint els riscos de seguretat com la injecció SQL
  • Com que les sentències SQL són cadenes, fins i tot si cometen un error en la sintaxi, no estan subjectes a comprovar si hi ha errors de construcció, però com que el model és una sintaxi de programa, es pot comprovar si hi ha errors en temps de construcció.

L'Entity Framework Core genera automàticament codi per connectar-se a aquests models i bases de dades des de bases de dades existents, Per contra, hi ha una manera d'escriure codi manualment i després generar automàticament una base de dades.

El primer s'anomena "base de dades primer" i el segon s'anomena "codi primer". També hi ha "model-first" que genera codi i bases de dades a partir de plànols, com ara diagrames ER, però no s'utilitza àmpliament a Entity Framework Core.

Aquesta vegada, utilitzarem un patró "base de dades primer" que genera codi suposant que ja existeix una base de dades.

Configuració de MySQL

En aquest consell, assegureu-vos de configurar MySQL prèviament per accedir a la vostra base de dades MySQL. Es pot configurar en un ordinador del vostre entorn de desenvolupament o en un altre ordinador a través de la xarxa. Si podeu connectar-vos a MySQL des del vostre entorn de desenvolupament, ja esteu a punt. En aquest consell, hem instal·lat MySQL en un entorn diferent.

Els passos de configuració de MySQL s'ometran ja que seran redundants. Les pàgines següents contenen consells relacionats amb MySQL per als passos de configuració.

Creació d'una taula

En aquest cas, crearem el següent esquema (base de dades) i la taula com a exemple.

  • Nom de l'esquema : test_schema
  • Nom de la taula : usuari
  • Columnes de la taula: [id], [nom], [contrasenya], [edat], [correu electrònic], [aniversari], [is_provisional_registration], [update_datetime]

No importa com l'escriguis, però si és tediós, executa i genera el següent SQL contra MySQL:

El següent és SQL de creació d'esquemes:

CREATE DATABASE `test_schema`;

La creació de taules és 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='テストコメント';

Afegiu un registre a l'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');

Definir permisos per al compte

Assegureu-vos de tenir un nom d'amfitrió configurat perquè el compte que programeu pugui accedir a l'esquema MySQL.

També heu d'establir permisos per accedir al test_schema compte al qual voleu connectar-vos.

Aquesta vegada, realitzarem SELECT el procés de recuperació dels registres. No ho faré aquesta vegada, però si INSERT UPDATE voleu inserir o actualitzar, comproveu i .

Instal·lació del Visual Studio

Suposant que ja l'heu configurat també. Si voleu conèixer el procediment de configuració, l'hem resumit a la pàgina següent.

Crear un projecte

Entity Framework Core no depèn d'un entorn d'execució específic, de manera que es pot utilitzar en molts projectes. En aquest cas, utilitzarem Entity Framework Core en un entorn d'aplicació de consola senzill.

Al projecte nou, seleccioneu Aplicació de consola (el que no sigui .NET Framework).

Heu creat el projecte. El nom del projecte pot ser qualsevol cosa.

Obteniu el paquet Entity Framework Core per a MySQL

Obteniu un paquet per utilitzar l'Entity Framework Core amb el NuGet. El paquet utilitza: Això no és oficial de Microsoft, però s'utilitza àmpliament.

  • Pomelo.EntityFrameworkCore.MySql

Feu clic amb el botó dret a la dependència i seleccioneu Administra els paquets NuGet.

Amb "Examinar" seleccionat a la pestanya, escriviu al camp Pomelo de cerca . Es mostrarà la llista de paquets relacionats.

Instal·leu els paquets següents des d'aquest:

  • Pomelo.EntityFrameworkCore.MySql

Seleccioneu el que voleu instal·lar i feu clic al botó Instal·la. Seleccioneu la darrera versió estable per a la versió.

El diàleg està bàsicament bé i bé.

Crec que el paquet és el següent.

A continuació, escriviu EntityFrameworkCore al camp de cerca i instal·leu també el següent.

  • Microsoft.EntityFrameworkCore.Tools

Per a les versions, Pomelo.EntityFrameworkCore.MySql coincideix amb la versió a la qual fa Microsoft.EntityFrameworkCore referència . Aquesta vegada ens referim a 8.0.2, així que Microsoft.EntityFrameworkCore.Tools fem que també sigui 8.0.2. Aquest paquet s'utilitza per generar codi a partir de la base de dades.

Al final, hauria de quedar així:

Crear un model (codi) a partir d'una configuració de taula de base de dades

Per generar automàticament el model i la resta de codi, primer heu de crear el projecte per assegurar-vos que no hi hagi errors. Si hi ha un error, el model fallarà. Si ja heu verificat que no hi ha errors, no cal que creeu.

Obriu la consola del gestor de paquets des del Visual Studio. Si no, podeu obrir-lo des del menú Eines, Gestor de paquets NuGet i Consola del gestor de paquets.

Veureu una finestra com la següent, així que assegureu-vos que el "Projecte predeterminat" a la cantonada superior dreta sigui el projecte per al qual voleu crear el model. (Cal anar amb compte si tens diversos projectes)

Introduïu el text següent al camp d'entrada: Els paràmetres canviaran en funció de l'entorn, així que canvieu-los de manera oportuna en funció de les explicacions següents.

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

Exemple d'entrada

Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Explicació del paràmetre Exemple de paràmetre
Proveïdor Si és Pomelo.EntityFrameworkCore.MySql MySQL, especifiqueu com ara. Pomelo.EntityFrameworkCore.MySql
Connexió Aquesta és la cadena de connexió per connectar-se a la base de dades. La cadena de connexió es pot utilitzar en altres aplicacions, així que escriviu el contingut especificat segons la notació de la cadena de connexió. Per cert, només s'utilitza temporalment per crear un model, de manera que no cal tenir en compte la seguretat després de publicar l'aplicació per a aquesta cadena de connexió. Si teniu un símbol a la contrasenya, aneu amb compte amb la fugida. "Server=TestServer; Base de dades = test_schema; usuari=usuari-prova; contrasenya=XXXXXXXX;"
f Forçar la sobreescriptura encara que ja tinguis un programa. No <>
Direcció de sortida El camí de la carpeta per generar el codi. Camí relatiu de la carpeta del projecte Models\Base de dades
Context Noms de classe de context quan s'utilitza l'Entity Framework TestDatabaseDbContext
NomsBase de dades d'ús Si s'especifica, el nom de la taula de la base de dades serà el nom de la classe tal com és. Si no, el nom de la classe d'entitat s'ajusta segons les regles. No <>
Anotacions de dades Si s'especifica, el tipus de columna afegeix automàticament l'atribut DataAnnotation a cada propietat. Això és una mica útil si voleu fer automàticament la comprovació d'entrada segons el tipus de base de dades. No <>
Espai de noms L'espai de noms al qual pertany la classe d'entitat generada. Si no s'especifica, l'espai de noms es determina segons la carpeta. Espai de noms de prova
ContextNamespace L'espai de noms al qual pertany el context generat. Si no s'especifica, l'espai de noms es determina segons la carpeta. Espai de noms de prova
NoOnConfiguring Eviteu incrustar cadenes de connexió en brut al vostre codi. No <>
NoPluralize Eviteu el nom de propietat plural de cada nom de taula al context. No <>

Premeu Retorn per executar-lo i generar automàticament el codi: Si es tracta d'un error, es mostrarà el motiu, així que si us plau, respongui segons el contingut de l'error.

user El codi del model de la taula té aquest aspecte:

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

Per cert, l'avís es mostra perquè la cadena de connexió s'escriu tal com està en el codi de la classe de context generada. Si és possible, la cadena de connexió s'ha d'emmagatzemar en un lloc separat i configurar-la en temps d'execució, però aquesta vegada és amb el propòsit de comprovar el funcionament, de manera que la deixaré tal com està.

Obtenir un registre i visualitzar-lo

Ara que teniu el codi per accedir als registres de la base de dades, intentem obtenir els registres i mostrar-los a la consola.

Program.cs i modifiqueu-lo de la següent manera.

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

Genera la DbContext classe new generada automàticament amb . Es declara en per permetre que using var la connexió a la base de dades es destrueixi automàticament.

dbContext ha generat propietats per accedir a cada model, de manera que aquesta vegada user podeu manipular els registres de la taula accedint User a les propietats. No cal que tingueu en compte l'SQL que s'emet perquè es genera automàticament internament.

ToList Aquí estem utilitzant user un mètode d'extensió per obtenir tots els registres de la taula.

foreach Després d'això, utilitzo user els mètodes i JsonSerializer.Serialize per mostrar la informació a la consola. Com user s'ha esmentat anteriorment, cada columna de la taula es declara com a propietat, de manera que també és possible recuperar el valor individualment.