Подгответе се за достъп до MySQL с Entity Framework Core (първо база данни)

Дата на създаване на страница :

Среда за потвърждение на операцията

Визуално студио
  • Visual Studio 2022
.НЕТЕН
  • .NET 8
Ядро на рамката на обекта
  • Entity Framework Core 8.0
MySQL
  • MySQL 8.4
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

*Горното е среда за проверка, но може да работи и в други версии.

Отначало

Entity Framework Core е библиотека от O/R mappers, които ви позволяват да осъществявате достъп до записи на база данни чрез дефинирани от код модели (класове), без директно да пишете SQL команди при достъп до базата данни. Това осигурява следните предимства:

  • Не пише SQL инструкции директно, намалявайки рисковете за защитата, като например SQL инжектиране
  • Тъй като SQL инструкциите са низове, дори и да допуснат грешка в синтаксиса, те не подлежат на проверка за грешки в компилацията, но тъй като моделът е програмен синтаксис, той може да бъде проверен за грешки по време на компилацията.

Entity Framework Core автоматично генерира код за свързване към тези модели и бази данни от съществуващи бази данни, Обратно, има начин за ръчно писане на код и след това автоматично генериране на база данни.

Първият се нарича "първо база данни", а вторият се нарича "първо код". Има и "модел на първо място", който генерира код и бази данни от чертежи, като 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 за 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; потребител=тест-потребител; парола=XXXXXXXX;"
f Принудително презаписване, дори ако вече имате програма. Няма <>
ИзходДиректор Пътят на папката за извеждане на кода. Относителен път от папката на проекта Модели\База данни
Контекста Имена на контекстни класове при използване на Entity Framework TestDatabaseDbContext
UseDatabaseNames Ако е посочено, името на таблицата в базата данни ще бъде името на класа такова, каквото е. Ако не, случаят с името на класа на обекта се коригира според правилата. Няма <>
ДанниАнотации Ако е посочен, типът на колоната автоматично добавя атрибута DataAnnotation към всяко свойство. Това е малко полезно, ако искате автоматично да правите проверка на входа според типа на базата данни. Няма <>
Namespace Пространството от имена, към което принадлежи генерираният клас на обекта. Ако не е посочено, пространството от имена се определя според папката. Пространство от имена на TestNamespace
ContextNamespace Пространството от имена, към което принадлежи генерираният контекст. Ако не е посочено, пространството от имена се определя според папката. Пространство от имена на TestNamespace
NoOnКонфигуриране Избягвайте да вграждате необработени низове за връзка във вашия код. Няма <>
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 методите и JsonSerializer.Serialize за показване на информацията в конзолата. Както user бе споменато по-горе, всяка колона в таблицата е декларирана като свойство, така че е възможно да се извлече и стойността поотделно.