Подготовка к доступу к MySQL с помощью Entity Framework Core (сначала база данных)

Дата создания страницы :

Среда подтверждения работы

Визуальная студия
  • Визуальная студия 2022
.СЕТЬ
  • .NET 8
Ядро Entity Framework
  • Ядро Entity Framework 8.0
MySQL
  • MySQL 8.4
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

* Вышеуказанная среда является средой верификации, но она может работать и в других версиях.

Сначала

Entity Framework Core — это библиотека O/R мапперов, которые позволяют получать доступ к записям базы данных через определенные в коде модели (классы) без прямой записи SQL-операторов при доступе к базе данных. Это дает следующие преимущества:

  • Не записывает SQL-операторы напрямую, что снижает риски безопасности, такие как внедрение SQL-кода
  • Так как SQL-операторы являются строками, то даже если они допускают ошибку в синтаксисе, они не подлежат проверке на наличие ошибок при сборке, но так как модель является синтаксисом программы, она может быть проверена на наличие ошибок во время сборки.

Entity Framework Core автоматически генерирует код для подключения к этим моделям и базам данных из существующих баз данных. И наоборот, есть способ вручную написать код, а затем автоматически создать базу данных.

Первый называется "database-first", а второй - "code-first". Существует также принцип «сначала модель», который генерирует код и базы данных на основе схем, таких как ER-диаграммы, но он не широко используется в Entity Framework Core.

На этот раз мы будем использовать шаблон «сначала база данных», который генерирует код на основе предположения, что база данных уже существует.

Настройка MySQL

В этом совете убедитесь, что вы заранее настроили MySQL для доступа к вашей базе данных MySQL. Его можно настроить на ПК в среде разработки или на другом ПК по сети. Если вы можете подключиться к MySQL из своей среды разработки, все в порядке. В этом совете мы установили MySQL в другую среду.

Шаги по настройке MySQL будут опущены, так как они будут излишними. На следующих страницах приведены советы по настройке MySQL.

Создание таблицы

В этом случае мы создадим следующую схему (базу данных) и таблицу в качестве примера.

  • Имя схемы : test_schema
  • Имя таблицы : пользователь
  • Столбцы таблицы: [id], [имя], [пароль], [возраст], [электронная почта], [день рождения], [is_provisional_registration], [update_datetime]

Не имеет значения, как вы это пишете, но если это утомительно, запустите и сгенерируйте следующий SQL для MySQL:

Ниже приведен SQL-код для создания схемы:

CREATE DATABASE `test_schema`;

Создание таблиц осуществляется по 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='テストコメント';

Добавьте запись в 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');

Настройка разрешений для учетной записи

Убедитесь, что у вас настроено имя хоста, чтобы программируемая учетная запись могла получить доступ к схеме MySQL.

Вам также необходимо установить разрешения для test_schema доступа к учетной записи, к которой вы хотите подключиться.

На этот раз мы выполним SELECT процесс извлечения записей. В этот раз я этого делать не буду, но если вы INSERT UPDATE хотите вставить или обновить, пожалуйста, проверьте и .

Настройка Visual Studio

Предполагая, что вы уже настроили его. Если вы хотите узнать процедуру настройки, мы кратко изложили ее на следующей странице.

Создание проекта

Entity Framework Core не зависит от конкретной среды выполнения, поэтому его можно использовать во многих проектах. В этом случае мы будем использовать Entity Framework Core в простой среде консольных приложений.

В новом проекте выберите Консольное приложение (в зависимости от того, что не является .NET Framework).

Вы создали проект. Название проекта может быть любым.

Получить пакет Entity Framework Core для MySQL

Получите пакет для использования Entity Framework Core с NuGet. В пакете используются: Это не официально от Microsoft, но широко используется.

  • Pomelo.EntityFrameworkCore.MySql

Щелкните правой кнопкой мыши зависимость и выберите Управление пакетами NuGet.

Выбрав на вкладке «Обзор», введите в поле Pomelo поиска . Отобразится список связанных пакетов.

Установите следующие пакеты отсюда:

  • Pomelo.EntityFrameworkCore.MySql

Выберите то, что вы хотите установить, и нажмите кнопку «Установить». Выберите последнюю стабильную версию для этой версии.

Диалог в основном нормальный и хороший.

Думаю, пакет следующий.

Затем введите EntityFrameworkCore в поле поиска и установите следующее.

  • Microsoft.EntityFrameworkCore.Tools (Майкрософт)

Для версий сопоставьте версию, Pomelo.EntityFrameworkCore.MySql на которую Microsoft.EntityFrameworkCore ссылается . На этот раз мы говорим о версии 8.0.2, поэтому Microsoft.EntityFrameworkCore.Tools давайте также сделаем ее 8.0.2. Этот пакет используется для генерации кода из базы данных.

В итоге он должен выглядеть так:

Создание модели (кода) из конфигурации таблицы базы данных

Чтобы модель и другой код были созданы автоматически, необходимо сначала выполнить сборку проекта, чтобы убедиться в отсутствии ошибок. Если произойдет ошибка, модель завершится ошибкой. Если вы уже убедились, что ошибок нет, сборку выполнять не нужно.

Откройте консоль диспетчера пакетов в Visual Studio. Если нет, вы можете открыть его из меню Сервис, NuGet Package Manager и Package Manager Console.

Вы увидите окно, подобное приведенному ниже, поэтому убедитесь, что «Проект по умолчанию» в правом верхнем углу — это проект, для которого вы хотите создать модель. (Нужно быть осторожным, если у вас несколько проектов)

Введите в поле ввода следующий текст: Параметры будут меняться в зависимости от окружающей среды, поэтому, пожалуйста, своевременно изменяйте их на основании следующих пояснений.

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

Пример ввода данных

Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Объяснение параметра Пример параметра
Поставщик Если это Pomelo.EntityFrameworkCore.MySql MySQL, укажите такой как. Pomelo.EntityFrameworkCore.MySql
Связь Это строка подключения для подключения к базе данных. Строка подключения может быть использована в других приложениях, поэтому пишите указанное содержимое в соответствии с обозначением строки подключения. Кстати, он используется только временно для создания модели, поэтому нет необходимости заботиться о безопасности после публикации приложения для этой строки подключения. Если в вашем пароле есть символ, будьте осторожны с побегом. "Server=TestServer; База данных = test_schema; user=test-user; password=XXXXXXXX;"
f Принудительно перезапишите, даже если у вас уже есть программа. Нет <>
OutputDir (ДиректорOutputDir) Путь к папке для вывода кода. Относительный путь из папки проекта Модели\База данных
Контекст Имена классов контекста при использовании Entity Framework TestDatabaseDbContext
UseDatabaseNames Если указано, имя таблицы в базе данных будет называться классом как оно есть. Если нет, то регистр имени класса сущности корректируется в соответствии с правилами. Нет <>
Аннотации к данным Если тип столбца указан, к каждому свойству автоматически добавляется атрибут DataAnnotation. Это немного полезно, если вы хотите автоматически выполнять проверку ввода в соответствии с типом базы данных. Нет <>
Пространство имен Пространство имен, к которому принадлежит сгенерированный класс сущности. Если не указано, пространство имен определяется в соответствии с папкой. TestNamespace (Пространство имен TestName)
ContextNamespace (КонтекстNamespace) Пространство имен, к которому принадлежит сгенерированный контекст. Если не указано, пространство имен определяется в соответствии с папкой. TestNamespace (Пространство имен TestName)
NoOnConfiguring Избегайте внедрения необработанных строк подключения в код. Нет <>
NoPluralize Избегайте множественного числа имен свойств каждой таблицы в контексте. Нет <>

Нажмите Enter, чтобы запустить его и автоматически сгенерировать код: Если это ошибка, будет указана причина, поэтому, пожалуйста, ответьте в соответствии с содержанием ошибки.

user Код модели для таблицы выглядит следующим образом:

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

Кстати, предупреждение выводится потому, что строка подключения записана так, как она есть в коде сгенерированного класса контекста. По возможности строку подключения следовало бы хранить в отдельном месте и задавать при выполнении, но в этот раз это с целью проверки работы, поэтому я оставлю все как есть.

Получить запись и просмотреть ее

Теперь, когда у вас есть код для доступа к записям в базе данных, давайте попробуем получить записи и отобразить их в консоли.

Program.cs и измените его следующим образом.

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

Сгенерируйте автоматически сгенерированный DbContext класс new с помощью . Он объявлен для using var автоматического уничтожения соединения с базой данных.

dbContext сгенерировал свойства для доступа к каждой модели, поэтому на этот раз user вы можете манипулировать записями в таблице User , получая доступ к свойствам. Вам не нужно знать о выдаваемом SQL-коде, так как он автоматически генерируется внутри компании.

ToList Здесь мы используем user метод расширения для получения всех записей в таблице.

foreach После этого я использую user методы and JsonSerializer.Serialize для отображения информации в консоли. Как user упоминалось выше, каждый столбец в таблице объявлен как свойство, поэтому также можно получить значение по отдельности.