Подгответе се за достъп до 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
бе споменато по-горе, всяка колона в таблицата е декларирана като свойство, така че е възможно да се извлече и стойността поотделно.