Preparación para acceder a MySQL con Entity Framework Core (base de datos primero)
Entorno de confirmación de operaciones
- Estudio visual
-
- Visual Studio 2022
- .RED
-
- .NET 8
- Núcleo de Entity Framework
-
- Entity Framework Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Lo anterior es un entorno de verificación, pero puede funcionar en otras versiones.
Al principio
Entity Framework Core es una biblioteca de asignadores de O/R que le permiten acceder a los registros de la base de datos a través de modelos definidos por código (clases) sin escribir directamente instrucciones SQL al acceder a la base de datos. Esto proporciona los siguientes beneficios:
- No escribe instrucciones SQL directamente, lo que reduce los riesgos de seguridad, como la inyección de SQL
- Dado que las sentencias SQL son cadenas, incluso si cometen un error en la sintaxis, no están sujetas a la comprobación de errores de compilación, pero como el modelo es una sintaxis de programa, se puede comprobar si hay errores en el momento de la compilación.
Entity Framework Core genera automáticamente código para conectarse a estos modelos y bases de datos desde bases de datos existentes, Por el contrario, hay una manera de escribir código manualmente y luego generar automáticamente una base de datos.
El primero se llama "base de datos primero" y el segundo se llama "código primero". También hay "model-first" que genera código y bases de datos a partir de blueprints, como diagramas de ER, pero no se usa ampliamente en Entity Framework Core.
Esta vez, usaremos un patrón de "base de datos primero" que genera código en el supuesto de que ya existe una base de datos.
Configuración de MySQL
En este consejo, asegúrese de configurar MySQL de antemano para acceder a su base de datos MySQL. Se puede configurar en un PC en su entorno de desarrollo o en otro PC a través de la red. Si puede conectarse a MySQL desde su entorno de desarrollo, está listo para comenzar. En este consejo, hemos instalado MySQL en un entorno diferente.
Se omitirán los pasos de configuración de MySQL, ya que serán redundantes. Las siguientes páginas contienen consejos relacionados con MySQL para los pasos de configuración.
Crear una tabla
En este caso, crearemos el siguiente esquema (base de datos) y tabla como ejemplo.
- Nombre del esquema: test_schema
- Nombre de la tabla : usuario
- Columnas de la tabla: [id], [nombre], [contraseña], [edad], [correo electrónico], [cumpleaños], [is_provisional_registration], [update_datetime]
No importa cómo lo escribas, pero si es tedioso, ejecuta y genera el siguiente SQL contra MySQL:
A continuación se muestra la creación de esquemas SQL:
CREATE DATABASE `test_schema`;
La creación de tablas es 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='テストコメント';
Agregar un registro a 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');
Establecer permisos para tu cuenta
Asegúrese de tener un nombre de host configurado para que la cuenta que programa pueda acceder al esquema MySQL.
También debe establecer permisos para acceder a test_schema
la cuenta a la que desea conectarse.
Esta vez, realizaremos SELECT
el proceso de recuperación de los registros.
No lo haré esta vez, pero si desea INSERT
UPDATE
insertar o actualizar, verifique y .
Configuración de Visual Studio
Suponiendo que ya lo hayas configurado también. Si desea conocer el procedimiento de configuración, lo hemos resumido en la siguiente página.
Crear un proyecto
Entity Framework Core no depende de un entorno de ejecución específico, por lo que se puede usar en muchos proyectos. En este caso, usaremos Entity Framework Core en un entorno de aplicación de consola simple.
En el nuevo proyecto, seleccione Aplicación de consola (lo que no sea .NET Framework).
Ha creado el proyecto. El nombre del proyecto puede ser cualquier cosa.
Obtener el paquete de Entity Framework Core para MySQL
Obtenga un paquete para usar Entity Framework Core con NuGet. El paquete usa: Esto no es oficial de Microsoft, pero es ampliamente utilizado.
- Pomelo.EntityFrameworkCore.MySql
Haga clic con el botón derecho en la dependencia y seleccione Administrar paquetes NuGet.
Con "Examinar" seleccionado en la pestaña, escriba en el campo Pomelo
de búsqueda . Se mostrará la lista de paquetes relacionados.
Instale los siguientes paquetes desde esto:
- Pomelo.EntityFrameworkCore.MySql
Seleccione lo que desea instalar y haga clic en el botón Instalar. Seleccione la última versión estable para la versión.
El diálogo está básicamente bien y bien.
Creo que el paquete es el siguiente.
Luego escriba EntityFrameworkCore
en el campo de búsqueda e instale también lo siguiente.
- Microsoft.EntityFrameworkCore.Tools
Para las versiones, Pomelo.EntityFrameworkCore.MySql
haga coincidir la versión a la que Microsoft.EntityFrameworkCore
hace referencia .
Esta vez nos referimos a 8.0.2, así que Microsoft.EntityFrameworkCore.Tools
hagámoslo 8.0.2 también.
Este paquete se usa para generar código a partir de la base de datos.
Al final, debería verse así:
Crear un modelo (código) a partir de una configuración de tabla de base de datos
Para que el modelo y otro código se generen automáticamente, primero debe compilar el proyecto para asegurarse de que no haya errores. Si hay un error, se producirá un error en el modelo. Si ya ha verificado que no hay errores, no necesita compilar.
Abra la consola del Administrador de paquetes desde Visual Studio. Si no es así, puede abrirlo desde el menú Herramientas, Administrador de paquetes NuGet y Consola del Administrador de paquetes.
Verá una ventana como la que se muestra a continuación, así que asegúrese de que el "Proyecto predeterminado" en la esquina superior derecha sea el proyecto para el que desea crear el modelo. (Debe tener cuidado si tiene varios proyectos)
Introduzca el siguiente texto en el campo de entrada: Los parámetros cambiarán según el entorno, así que cámbielos de manera oportuna según las siguientes explicaciones.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Ejemplo de 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ón de | parámetros | Ejemplo de parámetro |
---|---|---|
Proveedor | Si es Pomelo.EntityFrameworkCore.MySql MySQL, especifique como. |
Pomelo.EntityFrameworkCore.MySql |
Conexión | Esta es la cadena de conexión que se va a conectar a la base de datos. La cadena de conexión se puede usar en otras aplicaciones, así que escriba el contenido especificado de acuerdo con la notación de la cadena de conexión. Por cierto, solo se usa temporalmente para crear un modelo, por lo que no es necesario tener en cuenta la seguridad después de publicar la aplicación para esta cadena de conexión. Si tiene un símbolo en su contraseña, tenga cuidado con el escape. | "Servidor = Servidor de prueba; Base de datos = test_schema; usuario=usuario-prueba; contraseña = XXXXXXXX;" |
f | Forzar sobrescritura incluso si ya tiene un programa. | Sin <> |
DirectorioDeSalida | La ruta de acceso de la carpeta para generar el código. Ruta relativa desde la carpeta del proyecto | Modelos\Base de datos |
Contexto | Nombres de clase de contexto al usar Entity Framework | TestDatabaseDbContext |
UseDatabaseNames | Si se especifica, el nombre de la tabla en la base de datos será el nombre de la clase tal como está. Si no es así, el caso del nombre de la clase de entidad se ajusta de acuerdo con las reglas. | Sin <> |
Anotaciones de datos | Si se especifica, el tipo de columna anexa automáticamente el atributo DataAnnotation a cada propiedad. Esto es un poco útil si desea realizar automáticamente la verificación de entrada de acuerdo con el tipo de base de datos. | Sin <> |
Namespace | El espacio de nombres al que pertenece la clase de entidad generada. Si no se especifica, el espacio de nombres se determina según la carpeta. | Espacio de nombres de prueba |
ContextNamespace | El espacio de nombres al que pertenece el contexto generado. Si no se especifica, el espacio de nombres se determina según la carpeta. | Espacio de nombres de prueba |
NoOnConfiguring | Evite incrustar cadenas de conexión sin procesar en el código. | Sin <> |
NoPluralizar | Evite el nombre de propiedad plural de cada nombre de tabla en el contexto. | Sin <> |
Presione Enter para ejecutarlo y generar automáticamente el código: Si se trata de un error, se mostrará el motivo, así que responda de acuerdo con el contenido del error.
user
El código de modelo de la tabla tiene el siguiente aspecto:
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; }
}
Por cierto, la advertencia se muestra porque la cadena de conexión se escribe tal cual en el código de la clase de contexto generada. Si es posible, la cadena de conexión debe almacenarse en un lugar separado y establecerse en tiempo de ejecución, pero esta vez es con el propósito de verificar la operación, por lo que la dejaré como está.
Obtener un registro y verlo
Ahora que tiene el código para acceder a los registros en la base de datos, intentemos obtener los registros y mostrarlos en la consola.
Program.cs
y modifíquelo de la siguiente 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));
}
Genere la DbContext
clase new
generada automáticamente con . Se declara en para permitir que using var
la conexión de la base de datos se destruya automáticamente.
dbContext
ha generado propiedades para acceder a cada modelo, por lo que esta vez user
puede manipular los registros de la tabla accediendo User
a las propiedades.
No es necesario que tenga en cuenta el SQL que se emite porque se genera automáticamente internamente.
ToList
Aquí estamos usando user
un método de extensión para obtener todos los registros de la tabla.
foreach
Después de eso, utilizo user
los métodos y JsonSerializer.Serialize
para mostrar la información en la consola.
Como user
se mencionó anteriormente, cada columna de la tabla se declara como una propiedad, por lo que también es posible recuperar el valor individualmente.