Valmistaudu käyttämään MySQL:ää Entity Framework Coren avulla (tietokanta ensin)
Toiminnan vahvistusympäristö
- Visuaalinen studio
-
- Visual Studio 2022
- .VERKKO
-
- .NET 8
- Entiteettikehyksen ydin
-
- Entiteettikehys Core 8.0
- MySQL
-
- MySQL 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
*Yllä oleva on varmennusympäristö, mutta se voi toimia muissa versioissa.
Alun perin
Entity Framework Core on O/R-kartoittajien kirjasto, jonka avulla voit käyttää tietokantatietueita koodilla määritettyjen mallien (luokkien) kautta kirjoittamatta suoraan SQL-lausekkeita, kun käytät tietokantaa. Tämä tarjoaa seuraavat edut:
- Ei kirjoita SQL-lausekkeita suoraan, mikä vähentää tietoturvariskejä, kuten SQL-injektiota
- Koska SQL-lauseet ovat merkkijonoja, vaikka ne tekisivät virheen syntaksissa, niitä ei tarkisteta koontivirheiden varalta, mutta koska malli on ohjelman syntaksi, se voidaan tarkistaa virheiden varalta koontiaikana.
Entity Framework Core luo automaattisesti koodia muodostaakseen yhteyden näihin malleihin ja tietokantoihin olemassa olevista tietokannoista, Toisaalta on olemassa tapa kirjoittaa koodia manuaalisesti ja luoda sitten tietokanta automaattisesti.
Ensin mainittua kutsutaan "tietokanta-ensimmäiseksi" ja jälkimmäistä "koodi-ensin". On myös olemassa "malli ensin", joka luo koodia ja tietokantoja piirustuksista, kuten ER-kaavioista, mutta sitä ei käytetä laajalti Entity Framework Coressa.
Tällä kertaa käytämme "tietokanta ensin" -mallia, joka luo koodia olettaen, että tietokanta on jo olemassa.
MySQL-asennus
Varmista tässä vinkissä, että määrität MySQL:n etukäteen, jotta voit käyttää MySQL-tietokantaasi. Se voidaan määrittää tietokoneelle kehitysympäristössäsi tai toiseen tietokoneeseen verkon kautta. Jos pystyt muodostamaan yhteyden MySQL:ään kehitysympäristöstäsi, olet valmis. Tässä kärjessä olemme asentaneet MySQL:n eri ympäristöön.
MySQL-asennusvaiheet jätetään pois, koska ne ovat tarpeettomia. Seuraavilla sivuilla on MySQL:ään liittyviä vinkkejä asennusvaiheisiin.
Taulukon luominen
Tässä tapauksessa luomme seuraavan mallin (tietokannan) ja taulukon näytteeksi.
- Rakenteen nimi : test_schema
- Taulukon nimi : käyttäjä
- Taulukon sarakkeet : [tunnus], [nimi], [salasana], [ikä], [sähköposti], [syntymäpäivä], [is_provisional_registration], [update_datetime]
Sillä ei ole väliä, miten kirjoitat sen, mutta jos se on työlästä, suorita ja luo seuraava SQL MySQL:ää vastaan:
Seuraava on rakenteen luonti SQL:
CREATE DATABASE `test_schema`;
Taulukon luominen on 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='テストコメント';
Lisää tietue SQL:ään.
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');
Tilin käyttöoikeuksien määrittäminen
Varmista, että olet määrittänyt isäntänimen, jotta ohjelmoimasi tili voi käyttää MySQL-rakennetta.
Sinun on myös määritettävä käyttöoikeudet, jotta voit test_schema
käyttää tiliä, johon haluat muodostaa yhteyden.
Tällä kertaa suoritamme SELECT
tietueiden noutoprosessin.
En tee sitä tällä kertaa, mutta jos haluat INSERT
UPDATE
lisätä tai päivittää, tarkista ja .
Visual Studion asennus
Olettaen, että olet jo määrittänyt senkin. Jos haluat tietää asennusmenettelyn, olemme koonneet sen seuraavalle sivulle.
Luo projekti
Entity Framework Core ei ole riippuvainen tietystä suoritusympäristöstä, joten sitä voidaan käyttää monissa projekteissa. Tässä tapauksessa käytämme Entity Framework Corea yksinkertaisessa konsolisovellusympäristössä.
Valitse uudessa projektissa Konsolisovellus (sen mukaan, kumpi ei ole .NET Framework).
Olet luonut projektin. Projektin nimi voi olla mikä tahansa.
Hanki MySQL:n Entity Framework Core -paketti
Hanki paketti, jolla voit käyttää Entity Framework Corea NuGetin kanssa. Pakkauksessa käytetään: Tämä ei ole Microsoftin virallista, mutta sitä käytetään laajalti.
- Pomelo.EntityFrameworkCore.MySql
Napsauta riippuvuutta hiiren kakkospainikkeella ja valitse Hallitse NuGet-paketteja.
Kun "Selaa" on valittu välilehdeltä, kirjoita hakukenttään Pomelo
. Näkyviin tulee luettelo liittyvistä paketeista.
Asenna seuraavat paketit tästä:
- Pomelo.EntityFrameworkCore.MySql
Valitse asennettava ja napsauta Asenna-painiketta. Valitse versiolle uusin vakaa versio.
Valintaikkuna on periaatteessa OK ja hyvä.
Mielestäni paketti on seuraavanlainen.
Kirjoita EntityFrameworkCore
sitten hakukenttään ja asenna myös seuraava.
- Microsoft.EntityFrameworkCore.Tools
Versioiden Pomelo.EntityFrameworkCore.MySql
osalta vastaa versiota, johon Microsoft.EntityFrameworkCore
viittaa .
Tällä kertaa viittaamme 8.0.2:een, joten Microsoft.EntityFrameworkCore.Tools
tehdään siitä myös 8.0.2.
Tätä pakettia käytetään koodin luomiseen tietokannasta.
Loppujen lopuksi sen pitäisi näyttää tältä:
Mallin (koodin) luominen tietokantataulukon määrityksestä
Jotta malli ja muu koodi luodaan automaattisesti, sinun on ensin rakennettava projektisi varmistaaksesi, ettei siinä ole virheitä. Jos tapahtuu virhe, malli epäonnistuu. Jos olet jo varmistanut, että virheitä ei ole, sinun ei tarvitse rakentaa.
Avaa paketinhallintakonsoli Visual Studiosta. Jos ei, voit avata sen valikosta Työkalut, NuGet Package Manager ja Package Manager Console.
Näet alla olevan kaltaisen ikkunan, joten varmista, että oikeassa yläkulmassa oleva "Oletusprojekti" on projekti, jolle haluat luoda mallin. (Sinun on oltava varovainen, jos sinulla on useita projekteja)
Kirjoita syöttökenttään seuraava teksti: Parametrit muuttuvat ympäristön mukaan, joten muuta ne ajoissa seuraavien selitysten perusteella.
Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Syöttö esimample
Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parametrin | selitys | Parametriesimerkki |
---|---|---|
Toimittaja | Jos se on Pomelo.EntityFrameworkCore.MySql MySQL, määritä esimerkiksi. |
Pomelo.EntityFrameworkCore.MySql |
Yhteys | Tämä on yhteysmerkkijono, jolla muodostetaan yhteys tietokantaan. Yhteysmerkkijonoa voidaan käyttää muissa sovelluksissa, joten kirjoita määritetty sisältö yhteysmerkkijonon merkinnän mukaan. Sitä käytetään muuten vain väliaikaisesti mallin luomiseen, joten sinun ei tarvitse olla tietoinen suojauksesta tämän yhteysmerkkijonon sovelluksen julkaisemisen jälkeen. Jos salasanassasi on symboli, ole varovainen pakoamisen suhteen. | "Palvelin=Testipalvelin; Tietokanta=test_schema; käyttäjä=testikäyttäjä; salasana=XXXXXXXX;" |
f | Pakota korvaaminen, vaikka sinulla olisi jo ohjelma. | Ei <> |
OutputDir | Kansion polku koodin tulostamista varten. Suhteellinen polku projektikansiosta | Mallit\Tietokanta |
Asiayhteys | Kontekstiluokkien nimet Entity Frameworkia käytettäessä | TestDatabaseDbContext |
UseDatabaseNames | Jos se on määritetty, tietokannan taulukon nimi on luokan nimi sellaisena kuin se on. Jos näin ei ole, yksikön luokan nimen kirjainkoko muutetaan sääntöjen mukaisesti. | Ei <> |
DataAnnotations | Jos tämä on määritetty, saraketyyppi liittää automaattisesti DataAnnotation-määritteen kuhunkin ominaisuuteen. Tämä on hieman hyödyllistä, jos haluat tehdä syötteen tarkistuksen automaattisesti tietokannan tyypin mukaan. | Ei <> |
Namespace | Nimitila, johon luotu entiteettiluokka kuuluu. Jos nimeä ei ole määritetty, nimiavaruus määritetään kansion mukaan. | TestNamespace |
ContextNamespace | Nimitila, johon luotu konteksti kuuluu. Jos nimeä ei ole määritetty, nimiavaruus määritetään kansion mukaan. | TestNamespace |
NoOnConfiguring | Vältä raakayhteysmerkkijonojen upottamista koodiin. | Ei <> |
NoPluralize | Vältä kunkin taulukon nimen monikko-ominaisuuden nimeä kontekstissa. | Ei <> |
Paina Enter suorittaaksesi sen ja luodaksesi koodin automaattisesti: Jos kyseessä on virhe, syy näytetään, joten vastaa virheen sisällön mukaan.
user
Taulukon mallikoodi näyttää tältä:
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; }
}
Varoitus muuten näytetään, koska yhteysmerkkijono on kirjoitettu sellaisena kuin se on luodun kontekstiluokan koodissa. Jos mahdollista, yhteysmerkkijono tulee tallentaa erilliseen paikkaan ja asettaa ajon aikana, mutta tällä kertaa se on toiminnan tarkistamista varten, joten jätän sen ennalleen.
Hanki tietue ja tarkastele sitä
Nyt kun sinulla on koodi tietokannan tietueiden käyttämiseen, yritetään hakea tietueet ja näyttää ne konsolissa.
Program.cs
ja muokkaa sitä seuraavasti.
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));
}
Luo DbContext
automaattisesti luotu luokka new
komennolla . Se on määritetty, jotta using var
tietokantayhteys voidaan tuhota automaattisesti.
dbContext
on luonut ominaisuuksia kunkin mallin käyttämiseksi, joten tällä kertaa user
voit käsitellä taulukon User
tietueita käyttämällä ominaisuuksia.
Sinun ei tarvitse olla tietoinen myönnetystä SQL:stä, koska se luodaan automaattisesti sisäisesti.
ToList
Tässä käytämme user
laajennusmenetelmää kaikkien taulukon tietueiden saamiseksi.
foreach
Sen jälkeen käytän user
ja-menetelmiä JsonSerializer.Serialize
tietojen näyttämiseen konsolissa.
Kuten user
edellä mainittiin, jokainen taulukon sarake ilmoitetaan ominaisuudeksi, joten arvo on mahdollista hakea myös yksitellen.