Προετοιμαστείτε για πρόσβαση στη MySQL με το Entity Framework Core (πρώτα η βάση δεδομένων)

Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον επιβεβαίωσης λειτουργίας

Οπτικό στούντιο
  • Visual Studio 2022
.ΔΊΧΤΥ
  • .NET 8
Πυρήνας πλαισίου οντοτήτων
  • Πλαίσιο οντότητας Core 8.0
MySQL
  • MySQL 8,4
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

*Το παραπάνω είναι ένα περιβάλλον επαλήθευσης, αλλά μπορεί να λειτουργήσει σε άλλες εκδόσεις.

Αρχικά

Το Entity Framework Core είναι μια βιβλιοθήκη αντιστοιχιστών O/R που σας επιτρέπουν να έχετε πρόσβαση σε εγγραφές βάσης δεδομένων μέσω μοντέλων (κλάσεων) που ορίζονται από κώδικα χωρίς να γράφετε απευθείας προτάσεις SQL κατά την πρόσβαση στη βάση δεδομένων. Αυτό παρέχει τα ακόλουθα οφέλη:

  • Δεν γράφει προτάσεις SQL απευθείας, μειώνοντας τους κινδύνους ασφαλείας, όπως η έγχυση SQL
  • Δεδομένου ότι οι προτάσεις SQL είναι συμβολοσειρές, ακόμη και αν κάνουν λάθος στη σύνταξη, δεν υπόκεινται σε έλεγχο για σφάλματα κατασκευής, αλλά επειδή το μοντέλο είναι σύνταξη προγράμματος, μπορεί να ελεγχθεί για σφάλματα κατά το χρόνο κατασκευής.

Το Entity Framework Core δημιουργεί αυτόματα κώδικα για σύνδεση με αυτά τα μοντέλα και βάσεις δεδομένων από υπάρχουσες βάσεις δεδομένων, Αντίθετα, υπάρχει ένας τρόπος να γράψετε κώδικα με μη αυτόματο τρόπο και στη συνέχεια να δημιουργήσετε αυτόματα μια βάση δεδομένων.

Το πρώτο ονομάζεται "βάση δεδομένων-πρώτα" και το δεύτερο ονομάζεται "κώδικας-πρώτα". Υπάρχει επίσης το "model-first" που δημιουργεί κώδικα και βάσεις δεδομένων από σχεδιαγράμματα, όπως διαγράμματα ER, αλλά δεν χρησιμοποιείται ευρέως στο Entity Framework Core.

Αυτή τη φορά, θα χρησιμοποιήσουμε ένα μοτίβο "πρώτα η βάση δεδομένων" που δημιουργεί κώδικα με την υπόθεση ότι υπάρχει ήδη μια βάση δεδομένων.

Ρύθμιση MySQL

Σε αυτήν την συμβουλή, βεβαιωθείτε ότι έχετε ρυθμίσει τη MySQL εκ των προτέρων για πρόσβαση στη βάση δεδομένων MySQL. Μπορεί να ρυθμιστεί σε υπολογιστή στο περιβάλλον ανάπτυξής σας ή σε άλλον υπολογιστή μέσω δικτύου. Εάν μπορείτε να συνδεθείτε στη MySQL από το περιβάλλον ανάπτυξής σας, είστε έτοιμοι. Σε αυτήν την συμβουλή, έχουμε εγκαταστήσει τη MySQL σε διαφορετικό περιβάλλον.

Τα βήματα εγκατάστασης της MySQL θα παραλειφθούν καθώς θα είναι περιττά. Οι ακόλουθες σελίδες περιέχουν συμβουλές σχετικά με τη MySQL για τα βήματα εγκατάστασης.

Δημιουργία πίνακα

Σε αυτήν την περίπτωση, θα δημιουργήσουμε το ακόλουθο σχήμα (βάση δεδομένων) και πίνακα ως δείγμα.

  • Όνομα σχήματος : test_schema
  • Όνομα πίνακα : χρήστης
  • Στήλες πίνακα : [id], [όνομα], [κωδικός πρόσβασης], [ηλικία], [email], [γενέθλια], [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 σε ένα απλό περιβάλλον εφαρμογής κονσόλας.

Στο νέο έργο, επιλέξτε Console App (όποιο δεν είναι το .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 και Κονσόλα διαχείρισης πακέτων.

Θα δείτε ένα παράθυρο όπως το παρακάτω, οπότε βεβαιωθείτε ότι το "Προεπιλεγμένο έργο" στην επάνω δεξιά γωνία είναι το έργο για το οποίο θέλετε να δημιουργήσετε το μοντέλο. (Πρέπει να είστε προσεκτικοί εάν έχετε πολλά έργα)

Εισαγάγετε το ακόλουθο κείμενο στο πεδίο εισαγωγής: Οι παράμετροι θα αλλάξουν ανάλογα με το περιβάλλον, επομένως αλλάξτε τις εγκαίρως με βάση τις ακόλουθες εξηγήσεις.

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
Σύνδεση Αυτή είναι η συμβολοσειρά σύνδεσης για σύνδεση με τη βάση δεδομένων. Η συμβολοσειρά σύνδεσης μπορεί να χρησιμοποιηθεί σε άλλες εφαρμογές, επομένως γράψτε το καθορισμένο περιεχόμενο σύμφωνα με τη σημειογραφία της συμβολοσειράς σύνδεσης. Παρεμπιπτόντως, χρησιμοποιείται μόνο προσωρινά για τη δημιουργία ενός μοντέλου, επομένως δεν χρειάζεται να γνωρίζετε την ασφάλεια μετά τη δημοσίευση της εφαρμογής για αυτήν τη συμβολοσειρά σύνδεσης. Εάν έχετε ένα σύμβολο στον κωδικό πρόσβασής σας, προσέξτε τη διαφυγή. "Διακομιστής = TestServer; Βάση δεδομένων = test_schema; χρήστης = δοκιμαστικός χρήστης. κωδικός πρόσβασης = XXXXXXXX;"
f Αναγκαστική αντικατάσταση ακόμα κι αν έχετε ήδη ένα πρόγραμμα. Καμία <>
OutputDir Η διαδρομή φακέλου για την έξοδο του κώδικα. Σχετική διαδρομή από το φάκελο έργου Μοντέλα\Βάση δεδομένων
Πλαίσιο Ονόματα κλάσεων περιβάλλοντος κατά τη χρήση του Entity Framework TestDatabaseDbContext
UseDatabaseNames Εάν καθοριστεί, το όνομα του πίνακα στη βάση δεδομένων θα είναι το όνομα της κλάσης ως έχει. Εάν όχι, η περίπτωση του ονόματος κατηγορίας οντότητας προσαρμόζεται σύμφωνα με τους κανόνες. Καμία <>
Σχολιασμοί δεδομένων Εάν καθοριστεί, ο τύπος στήλης προσαρτά αυτόματα το χαρακτηριστικό DataAnnotation σε κάθε ιδιότητα. Αυτό είναι λίγο χρήσιμο εάν θέλετε να κάνετε αυτόματα έλεγχο εισόδου ανάλογα με τον τύπο της βάσης δεδομένων. Καμία <>
Namespace Ο χώρος ονομάτων στον οποίο ανήκει η κλάση οντότητας που δημιουργείται. Εάν δεν έχει καθοριστεί, ο χώρος ονομάτων καθορίζεται σύμφωνα με το φάκελο. TestNamespace
ContextNamespace Ο χώρος ονομάτων στον οποίο ανήκει το περιβάλλον που δημιουργείται. Εάν δεν έχει καθοριστεί, ο χώρος ονομάτων καθορίζεται σύμφωνα με το φάκελο. TestNamespace
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));
}

Δημιουργήστε την κλάση new που δημιουργείται αυτόματα με το DbContext . Δηλώνεται στο για να επιτρέπεται using var η αυτόματη καταστροφή της σύνδεσης βάσης δεδομένων.

dbContext έχει δημιουργήσει ιδιότητες για πρόσβαση σε κάθε μοντέλο, επομένως αυτή τη φορά user μπορείτε να χειριστείτε τις εγγραφές στον πίνακα αποκτώντας User πρόσβαση στις ιδιότητες. Δεν χρειάζεται να γνωρίζετε την SQL που εκδίδεται, επειδή δημιουργείται αυτόματα εσωτερικά.

ToList Εδώ χρησιμοποιούμε user μια μέθοδο επέκτασης για να λάβουμε όλες τις εγγραφές στον πίνακα.

foreach Μετά από αυτό, χρησιμοποιώ user τις μεθόδους and JsonSerializer.Serialize για να εμφανίσω τις πληροφορίες στην κονσόλα. Όπως user αναφέρθηκε παραπάνω, κάθε στήλη στον πίνακα δηλώνεται ως ιδιότητα, επομένως είναι επίσης δυνατή η ανάκτηση της τιμής μεμονωμένα.