الاستعداد للوصول إلى MySQL باستخدام Entity Framework Core (قاعدة البيانات أولا)
بيئة تأكيد التشغيل
- استوديو مرئي
-
- برنامج Visual Studio 2022
- .صافي
-
- .NET 8
- إطار عمل الكيان الأساسي
-
- إطار عمل الكيان الأساسي 8.0
- MySQL
-
- ماي إس كيو إل 8.4
- Pomelo.EntityFrameworkCore.MySql
-
- 8.0.2
* ما ورد أعلاه هو بيئة تحقق ، ولكنه قد يعمل في إصدارات أخرى.
في البداية
Entity Framework Core عبارة عن مكتبة من مخططات O/R التي تسمح لك بالوصول إلى سجلات قاعدة البيانات من خلال النماذج (الفئات) المعرفة بالتعليمات البرمجية دون كتابة عبارات SQL مباشرة عند الوصول إلى قاعدة البيانات. يوفر هذا المزايا التالية:
- لا يكتب عبارات SQL مباشرة، مما يقلل من مخاطر الأمان مثل حقن SQL
- نظرا لأن عبارات SQL عبارة عن سلاسل ، حتى إذا ارتكبت خطأ في بناء الجملة ، فإنها لا تخضع للتحقق من أخطاء الإنشاء ، ولكن نظرا لأن النموذج عبارة عن بناء جملة برنامج ، فيمكن التحقق من وجود أخطاء في وقت الإنشاء.
يقوم Entity Framework Core تلقائيا بإنشاء تعليمات برمجية للاتصال بهذه النماذج وقواعد البيانات من قواعد البيانات الموجودة، على العكس من ذلك ، هناك طريقة لكتابة التعليمات البرمجية يدويا ثم إنشاء قاعدة بيانات تلقائيا.
الأول يسمى "قاعدة البيانات أولا" والأخير يسمى "الرمز أولا". هناك أيضا "نموذج أولا" يقوم بإنشاء تعليمات برمجية وقواعد بيانات من المخططات ، مثل مخططات التقارير الإلكترونية ، ولكنه لا يستخدم على نطاق واسع في Entity Framework Core.
هذه المرة، سنستخدم نمط "قاعدة البيانات أولا" الذي ينشئ التعليمات البرمجية على افتراض وجود قاعدة بيانات بالفعل.
إعداد MySQL
في هذه النصيحة ، تأكد من إعداد MySQL مسبقا للوصول إلى قاعدة بيانات MySQL الخاصة بك. يمكن إعداده على جهاز كمبيوتر في بيئة التطوير الخاصة بك أو على جهاز كمبيوتر آخر عبر الشبكة. إذا كان بإمكانك الاتصال ب MySQL من بيئة التطوير الخاصة بك ، فأنت على ما يرام. في هذه النصيحة ، قمنا بتثبيت MySQL في بيئة مختلفة.
سيتم حذف خطوات إعداد MySQL لأنها ستكون زائدة عن الحاجة. تحتوي الصفحات التالية على تلميحات متعلقة ب MySQL لخطوات الإعداد.
إنشاء جدول
في هذه الحالة ، سنقوم بإنشاء المخطط التالي (قاعدة البيانات) والجدول كعينة.
- اسم المخطط : test_schema
- اسم الجدول : مستخدم
- أعمدة الجدول: [id] ، [name] ، [كلمة المرور] ، [العمر] ، [البريد الإلكتروني] ، [تاريخ الميلاد] ، [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. تستخدم العبوة: هذا ليس رسميا من 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 |
اتصال | هذه هي سلسلة الاتصال للاتصال بقاعدة البيانات. يمكن استخدام سلسلة الاتصال في تطبيقات أخرى ، لذا يرجى كتابة المحتوى المحدد وفقا لتدوين سلسلة الاتصال. بالمناسبة ، يتم استخدامه مؤقتا فقط لإنشاء نموذج ، لذلك ليست هناك حاجة للتعرف على الأمان بعد نشر التطبيق لسلسلة الاتصال هذه. إذا كان لديك رمز في كلمة المرور الخاصة بك ، فكن حذرا بشأن الهروب. | "الخادم = TestServer; قاعدة البيانات=test_schema; مستخدم = مستخدم اختبار ؛ كلمة المرور = XXXXXXXX ؛ " |
f | فرض الكتابة فوق حتى إذا كان لديك برنامج بالفعل. | لا <> |
الإخراج | مسار المجلد لإخراج التعليمات البرمجية. المسار النسبي من مجلد المشروع | النماذج/قاعدة البيانات |
سياق | أسماء فئات السياق عند استخدام Entity Framework | TestDatabaseDbContext |
UseDatabaseNames | إذا تم تحديده، فسيكون اسم الجدول في قاعدة البيانات هو اسم الفئة كما هو. إذا لم يكن الأمر كذلك، تعديل حالة اسم فئة الكيان وفقا للقواعد. | لا <> |
التعليقات التوضيحية للبيانات | إذا تم تحديده، يقوم نوع العمود تلقائيا بإلحاق السمة DataAnnotation بكل خاصية. يعد هذا مفيدا بعض الشيء إذا كنت تريد إجراء فحص الإدخال تلقائيا وفقا لنوع قاعدة البيانات. | لا <> |
Namespace | مساحة الاسم التي تنتمي إليها فئة الكيان التي تم إنشاؤها. إذا لم يتم تحديدها، يتم تحديد مساحة الاسم وفقا للمجلد. | مساحة TestNamespace |
ContextNamespace | مساحة الاسم التي ينتمي إليها السياق الذي تم إنشاؤه. إذا لم يتم تحديدها، يتم تحديد مساحة الاسم وفقا للمجلد. | مساحة TestNamespace |
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));
}
قم بإنشاء الفئة DbContext
new
التي تم إنشاؤها تلقائيا باستخدام . يتم الإعلان عنه للسماح using var
بتدمير اتصال قاعدة البيانات تلقائيا.
dbContext
أنشأ خصائص للوصول إلى كل نموذج، لذا يمكنك هذه المرة user
معالجة السجلات في الجدول عن طريق User
الوصول إلى الخصائص.
لست بحاجة إلى أن تكون على دراية ب SQL التي تم إصدارها لأنه يتم إنشاؤها تلقائيا داخليا.
ToList
نحن هنا نستخدم user
طريقة التمديد للحصول على جميع السجلات في الجدول.
foreach
بعد ذلك ، أستخدم user
الطرق وعرض JsonSerializer.Serialize
المعلومات في وحدة التحكم.
كما user
ذكرنا أعلاه ، يتم الإعلان عن كل عمود في الجدول كخاصية ، لذلك من الممكن أيضا استرداد القيمة بشكل فردي.