Förbereda för åtkomst till MySQL med Entity Framework Core (databas först)
Miljö för driftbekräftelse
- Visuell Studio
-
- Visual Studio 2022
- .NÄT
-
- .NET 8
- Kärna för entitetsramverk
-
- Entity Framework Core 8.0
- MySQL (på engelska)
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Ovanstående är en verifieringsmiljö, men den kan fungera i andra versioner.
Först
Entity Framework Core är ett bibliotek med O/R-mappningar som gör att du kan komma åt databasposter via koddefinierade modeller (klasser) utan att direkt skriva SQL-satser när du kommer åt databasen. Detta ger följande fördelar:
- Skriver inte SQL-instruktioner direkt, vilket minskar säkerhetsrisker som SQL-inmatning
- Eftersom SQL-satser är strängar, även om de gör ett misstag i syntaxen, är de inte föremål för kontroll av byggfel, men eftersom modellen är en programsyntax kan den kontrolleras för fel vid byggtiden.
Entity Framework Core genererar automatiskt kod för att ansluta till dessa modeller och databaser från befintliga databaser, Omvänt finns det ett sätt att manuellt skriva kod och sedan automatiskt generera en databas.
Den förstnämnda kallas "databas-först" och den senare kallas "kod-först". Det finns också "model-first" som genererar kod och databaser från ritningar, till exempel ER-diagram, men det används inte i stor utsträckning i Entity Framework Core.
Den här gången använder vi ett "databas-först"-mönster som genererar kod under antagandet att det redan finns en databas.
MySQL-inställning
I det här tipset, se till att du ställer in MySQL i förväg för att komma åt din MySQL-databas. Den kan ställas in på en dator i din utvecklingsmiljö eller på en annan dator över nätverket. Om du kan ansluta till MySQL från din utvecklingsmiljö är du bra att gå. I det här tipset har vi installerat MySQL i en annan miljö.
Installationsstegen för MySQL kommer att utelämnas eftersom de kommer att vara överflödiga. Följande sidor innehåller MySQL-relaterade tips för installationssteg.
Skapa en tabell
I det här fallet skapar vi följande schema (databas) och tabell som ett exempel.
- Schemanamn : test_schema
- Tabellnamn : användare
- Tabellkolumner: [id], [namn], [lösenord], [ålder], [e-post], [födelsedag], [is_provisional_registration], [update_datetime]
Det spelar ingen roll hur du skriver det, men om det är tråkigt, kör och generera följande SQL mot MySQL:
Följande är SQL för att skapa scheman:
CREATE DATABASE `test_schema`;
Att skapa tabeller är 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='テストコメント';
Lägga till en post i 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');
Ange behörigheter för ditt konto
Kontrollera att du har ett värdnamn konfigurerat så att det konto som du programmerar kan komma åt MySQL-schemat.
Du måste också ställa in behörigheter för att test_schema
komma åt det konto du vill ansluta till.
Den här gången kommer vi att utföra SELECT
processen med att hämta posterna.
Jag kommer inte att göra det den här gången, men om du INSERT
UPDATE
vill infoga eller uppdatera, kontrollera och .
Konfiguration av Visual Studio
Förutsatt att du redan har ställt in det också. Om du vill veta installationsproceduren har vi sammanfattat den på följande sida.
Skapa ett projekt
Entity Framework Core är inte beroende av en specifik körningsmiljö, så den kan användas i många projekt. I det här fallet använder vi Entity Framework Core i en enkel konsolprogrammiljö.
I det nya projektet väljer du Konsolapp (beroende på vilket som inte är .NET Framework).
Du har skapat projektet. Projektnamnet kan vara vad som helst.
Hämta Entity Framework Core-paketet för MySQL
Hämta ett paket för att använda Entity Framework Core med NuGet. Paketet använder: Detta är inte officiellt från Microsoft, men det används i stor utsträckning.
- Pomelo.EntityFrameworkCore.MySql
Högerklicka på beroendet och välj Hantera NuGet-paket.
Med "Bläddra" valt från fliken, skriv i sökfältet Pomelo
. Listan över relaterade paket kommer att visas.
Installera följande paket från detta:
- Pomelo.EntityFrameworkCore.MySql
Välj vad du vill installera och klicka på knappen Installera. Välj den senaste stabila versionen för versionen.
Dialogen är i princip OK och bra.
Jag anser att paketet är följande.
Skriv EntityFrameworkCore
sedan i sökfältet och installera följande också.
- Microsoft.EntityFrameworkCore.Tools
För versioner matchar du Pomelo.EntityFrameworkCore.MySql
den version som refereras Microsoft.EntityFrameworkCore
av .
Den här gången hänvisar vi till 8.0.2, så Microsoft.EntityFrameworkCore.Tools
låt oss göra det 8.0.2 också.
Det här paketet används för att generera kod från databasen.
I slutändan ska det se ut så här:
Skapa en modell (kod) från en databastabellkonfiguration
Om du vill att din modell och annan kod ska genereras automatiskt måste du först skapa projektet för att se till att det inte finns några fel. Om det finns ett fel kommer modellen att misslyckas. Om du redan har kontrollerat att det inte finns några fel behöver du inte bygga.
Öppna Package Manager-konsolen från Visual Studio. Annars kan du öppna den från menyn Verktyg, NuGet Package Manager och Package Manager Console.
Du kommer att se ett fönster som det nedan, så se till att "Standardprojekt" i det övre högra hörnet är det projekt du vill skapa modellen för. (Du måste vara försiktig om du har flera projekt)
Ange följande text i inmatningsfältet: Parametrarna kommer att ändras beroende på miljön, så ändra dem i tid baserat på följande förklaringar.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Exempel på inmatning
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parameter | Förklaring | Exempel på parameter |
---|---|---|
Familjeförsörjare | Om det är Pomelo.EntityFrameworkCore.MySql MySQL anger du t.ex. |
Pomelo.EntityFrameworkCore.MySql |
Samband | Det här är συμβολοσειρά σύν� Συμβολοσειρά σύνδεσης kan användas i andra appar, så skriv det angivna innehållet enligt notationen för συμβολοσει� Förresten, den används bara tillfälligt för att skapa en modell, så det finns ingen anledning att vara medveten om säkerheten när du har publicerat appen för den här anslutningssträngen. Om du har en symbol i ditt lösenord, var försiktig med escape. | "Server=TestServer; Databas = test_schema; användare = test-användare; lösenord = XXXXXXXX; |
f | Tvinga överskrivning även om du redan har ett program. | Inga <> |
OutputDir | Mappsökvägen för att mata ut koden. Relativ sökväg från projektmappen | Modeller\Databas |
Sammanhang | Kontextklassnamn när du använder Entity Framework | TestDatabaseDbContext |
UseDatabaseNames (på engelska) | Om det anges kommer tabellnamnet i databasen att vara klassnamnet som det är. Om inte, justeras fallet med enhetsklassens namn enligt reglerna. | Inga <> |
DataAnnoteringar | Om det anges lägger kolumntypen automatiskt till attributet DataAnnotation i varje egenskap. Detta är lite användbart om du automatiskt vill göra inmatningskontroll beroende på typen av databas. | Inga <> |
Namespace | Det namnområde som den genererade entitetsklassen tillhör. Om inget anges bestäms namnområdet enligt mappen. | TestNamespace (på engelska) |
Kontextnamnrymd | Det namnområde som den genererade kontexten tillhör. Om inget anges bestäms namnområdet enligt mappen. | TestNamespace (på engelska) |
NoOnKonfigurera | Undvik att bädda in råa anslutningssträngar i koden. | Inga <> |
NejPluralisera | Undvik plural egenskapsnamn för varje tabellnamn i kontexten. | Inga <> |
Tryck på Retur för att köra den och generera koden automatiskt: Om det är ett fel kommer orsaken att visas, så svara enligt innehållet i felet.
user
Modellkoden för tabellen ser ut så här:
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; }
}
Förresten, varningen visas eftersom anslutningssträngen är skriven som den är i koden för den genererade kontextklassen. Om möjligt bör anslutningssträngen lagras på en separat plats och ställas in vid körning, men den här gången är det för att kontrollera åtgärden, så jag lämnar den som den är.
Hämta en post och visa den
Nu när du har koden för att komma åt posterna i databasen ska vi försöka hämta posterna och visa dem i konsolen.
Program.cs
och ändra den enligt följande.
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));
}
Generera den DbContext
automatiskt genererade klassen new
med . Den deklareras för att tillåta using var
att databasanslutningen förstörs automatiskt.
dbContext
har genererat egenskaper för att komma åt varje modell, så den här gången user
kan du manipulera posterna i tabellen genom User
att komma åt egenskaperna.
Du behöver inte vara medveten om den SQL som utfärdas eftersom den genereras automatiskt internt.
ToList
Här använder user
vi en tilläggsmetod för att hämta alla poster i tabellen.
foreach
Efter det använder user
jag metoderna och JsonSerializer.Serialize
för att visa informationen i konsolen.
Som user
nämnts ovan deklareras varje kolumn i tabellen som en egenskap, så det är också möjligt att hämta värdet individuellt.