התכוננו לגשת ל-MySQL עם Entity Framework Core (מסד נתונים תחילה)
סביבת אישור פעולה
- סטודיו חזותי
-
- סטודיו חזותי 2022
- .רשת
-
- .NET 8
- ליבת מסגרת ישות
-
- Entity Framework 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 מייצרת באופן אוטומטי קוד כדי להתחבר למודלים ולמסדי נתונים אלה ממסדי נתונים קיימים, לעומת זאת, יש דרך לכתוב קוד באופן ידני ולאחר מכן ליצור מסד נתונים באופן אוטומטי.
הראשון נקרא "מסד נתונים תחילה" והשני נקרא "קוד תחילה". יש גם "מודל תחילה" שמייצר קוד ומסדי נתונים משרטוטים, כגון דיאגרמות ER, אך הוא אינו נמצא בשימוש נרחב ב-Entity Framework Core.
הפעם, נשתמש בתבנית "מסד נתונים תחילה" שיוצרת קוד בהנחה שמסד נתונים כבר קיים.
הגדרת MySQL
בטיפ זה, וודא שאתה מגדיר את MySQL מראש כדי לגשת למסד הנתונים MySQL שלך. ניתן להגדיר אותו במחשב בסביבת הפיתוח שלך או במחשב אחר דרך הרשת. אם אתה יכול להתחבר ל- MySQL מסביבת הפיתוח שלך, אתה מוכן לצאת לדרך. בטיפ זה התקנו את MySQL בסביבה אחרת.
שלבי ההתקנה של MySQL יושמטו מכיוון שהם יהיו מיותרים. הדפים הבאים מכילים עצות הקשורות ל-MySQL לשלבי הגדרה.
יצירת טבלה
במקרה זה, ניצור את הסכימה הבאה (מסד נתונים) והטבלה כדוגמה.
- שם הסכימה : test_schema
- שם הטבלה : משתמש
- עמודות טבלה: [מזהה], [שם], [סיסמה], [גיל], [דואר אלקטרוני], [יום הולדת], [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 Core עבור MySQL
קבל חבילה לשימוש ב- Entity Framework Core עם NuGet. החבילה משתמשת: זה לא רשמי ממיקרוסופט, אבל הוא נמצא בשימוש נרחב.
- 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 |
חיבור | זוהי מחרוזת החיבור להתחברות למסד הנתונים. ניתן להשתמש במחרוזת החיבור באפליקציות אחרות, לכן כתוב את התוכן שצוין בהתאם לסימון של מחרוזת החיבור. אגב, הוא משמש רק באופן זמני ליצירת מודל, כך שאין צורך להיות מודע לאבטחה לאחר פרסום היישום עבור מחרוזת חיבור זו. אם יש לך סמל בסיסמה שלך, היזהר מפני בריחה. | "שרת = TestServer; מסד נתונים=test_schema; user=test-user; password=XXXXXXXX;" |
f | כפה החלפה גם אם כבר יש לך תוכנית. | אין <> |
פלטדיר | נתיב התיקיה לפלט הקוד. נתיב יחסי מתיקיית הפרוייקט | מודלים\מסד נתונים |
הקשר | שמות מחלקות הקשר בעת שימוש ב-Entity Framework | TestDatabaseDbContext |
השתמש בשמות מסד נתונים | אם צוין, שם הטבלה במסד הנתונים יהיה שם המחלקה כפי שהוא. אם לא, המקרה של שם מחלקת הישות מותאם בהתאם לכללים. | אין <> |
ביאורי נתונים | אם צוין, סוג העמודה מוסיף באופן אוטומטי את התכונה DataAnnotation לכל מאפיין. זה קצת שימושי אם אתה רוצה לבצע בדיקת קלט באופן אוטומטי בהתאם לסוג מסד הנתונים. | אין <> |
Namespace | מרחב השמות שאליו שייכת מחלקת הישות שנוצרה. אם לא צוין, מרחב השמות נקבע בהתאם לתיקיה. | מרחב שמות מבחן |
מרחב שמות ההקשר | מרחב השמות שאליו שייך ההקשר שנוצר. אם לא צוין, מרחב השמות נקבע בהתאם לתיקיה. | מרחב שמות מבחן |
NoOnConfiguring | הימנע מהטמעת מחרוזות חיבור גולמיות בקוד שלך. | אין <> |
ללא פלורליזציה | הימנע משם המאפיין ברבים של כל שם טבלה בהקשר. | אין <> |
הקש 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
וJsonSerializer.Serialize
- כדי להציג את המידע בקונסולה.
כאמורuser
, כל עמודה בטבלה מוצהרת כמאפיין, כך שניתן גם לאחזר את הערך בנפרד.