اینٹیٹی فریم ورک کور (ڈیٹا بیس-فرسٹ) کے ساتھ MySQL تک رسائی حاصل کرنے کی تیاری کریں

صفحہ تخلیق تاریخ :

کارروائی کی تصدیق کا ماحول

Visual Studio
  • Visual Studio 2022
.جال
  • .NET 8
Entity Framework Core
  • Entity Framework Core 8.0
MySQL
  • MySQL 8.4
Pomelo.EntityFrameworkCore.MySql
  • 8.0.2

* مندرجہ بالا ایک تصدیقی ماحول ہے، لیکن یہ دوسرے ورژن میں کام کر سکتا ہے.

سب سے پہلے

اینٹیٹی فریم ورک کور او / آر میپرز کی ایک لائبریری ہے جو آپ کو ڈیٹا بیس تک رسائی حاصل کرتے وقت براہ راست ایس کیو ایل بیانات لکھے بغیر کوڈ-متعین ماڈلز (کلاسوں) کے ذریعے ڈیٹا بیس ریکارڈ تک رسائی حاصل کرنے کی اجازت دیتی ہے۔ یہ مندرجہ ذیل فوائد فراہم کرتا ہے:

  • براہ راست ایس کیو ایل بیانات نہیں لکھتا ہے ، ایس کیو ایل انجکشن جیسے سیکیورٹی خطرات کو کم کرتا ہے۔
  • چونکہ ایس کیو ایل بیانات تار ہیں ، یہاں تک کہ اگر وہ نحو میں غلطی کرتے ہیں تو ، وہ بلڈ غلطیوں کی جانچ پڑتال کے تابع نہیں ہیں ، لیکن چونکہ ماڈل ایک پروگرام نحو ہے ، لہذا اسے بلڈ ٹائم میں غلطیوں کے لئے چیک کیا جاسکتا ہے۔

اینٹیٹی فریم ورک کور خود بخود موجودہ ڈیٹا بیس سے ان ماڈلز اور ڈیٹا بیس سے رابطہ قائم کرنے کے لئے کوڈ تیار کرتا ہے، اس کے برعکس ، دستی طور پر کوڈ لکھنے اور پھر خود بخود ڈیٹا بیس تیار کرنے کا ایک طریقہ ہے۔

پہلے کو "ڈیٹا بیس فرسٹ" کہا جاتا ہے اور مؤخر الذکر کو "کوڈ فرسٹ" کہا جاتا ہے۔ "ماڈل فرسٹ" بھی ہے جو بلیو پرنٹ سے کوڈ اور ڈیٹا بیس تیار کرتا ہے ، جیسے ای آر ڈایاگرام ، لیکن یہ اینٹیٹی فریم ورک کور میں وسیع پیمانے پر استعمال نہیں ہوتا ہے۔

اس بار ، ہم "ڈیٹا بیس فرسٹ" پیٹرن استعمال کریں گے جو اس مفروضے پر کوڈ پیدا کرتا ہے کہ ڈیٹا بیس پہلے سے موجود ہے۔

MySQL Setup

اس ٹپ میں ، اس بات کو یقینی بنائیں کہ آپ نے اپنے MySQL ڈیٹا بیس تک رسائی حاصل کرنے کے لئے پہلے سے MySQL ترتیب دیا ہے۔ یہ آپ کے ترقیاتی ماحول میں پی سی پر یا نیٹ ورک پر کسی دوسرے پی سی پر مرتب کیا جاسکتا ہے۔ اگر آپ اپنے ترقیاتی ماحول سے MySQL سے رابطہ قائم کرسکتے ہیں تو ، آپ جانے کے لئے اچھے ہیں۔ اس ٹپ میں ، ہم نے MySQL کو ایک مختلف ماحول میں انسٹال کیا ہے۔

MySQL سیٹ اپ کے اقدامات کو خارج کردیا جائے گا کیونکہ وہ غیر ضروری ہوں گے۔ مندرجہ ذیل صفحات سیٹ اپ اقدامات کے لئے MySQL سے متعلق تجاویز پر مشتمل ہیں۔

ایک جدول بنانا

اس صورت میں ، ہم نمونے کے طور پر مندرجہ ذیل اسکیما (ڈیٹا بیس) اور جدول بنائیں گے۔

  • اسکیما کا نام : test_schema
  • جدول کا نام : صارف
  • جدول کالم: [آئی ڈی]، [نام]، [پاس ورڈ]، [عمر]، [ای میل]، [سالگرہ]، [is_provisional_registration]، [update_datetime]

اس سے کوئی فرق نہیں پڑتا کہ آپ اسے کیسے لکھتے ہیں ، لیکن اگر یہ تھکا دینے والا ہے تو ، مائی ایس کیو ایل کے خلاف درج ذیل ایس کیو ایل چلائیں اور تیار کریں:

اسکیما تخلیق ایس کیو ایل مندرجہ ذیل ہے:

CREATE DATABASE `test_schema`;

جدول کی تخلیق ایس کیو ایل ہے۔

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='テストコメント';

ایس کیو ایل میں ایک ریکارڈ شامل کریں۔

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 Setup

فرض کریں کہ آپ نے پہلے ہی اسے بھی ترتیب دے دیا ہے۔ اگر آپ سیٹ اپ کے طریقہ کار کو جاننا چاہتے ہیں تو، ہم نے مندرجہ ذیل صفحے پر اس کا خلاصہ کیا ہے.

ایک منصوبہ بنائیں

اینٹیٹی فریم ورک کور ایک مخصوص عملدرآمد کے ماحول پر منحصر نہیں ہے ، لہذا اسے بہت سے منصوبوں میں استعمال کیا جاسکتا ہے۔ اس صورت میں ، ہم ایک سادہ کنسول ایپلی کیشن ماحول میں اینٹیٹی فریم ورک کور استعمال کریں گے۔

نئے پروجیکٹ میں ، کنسول ایپ منتخب کریں (جو بھی .NET فریم ورک نہیں ہے)۔

آپ نے منصوبہ بنایا ہے. پروجیکٹ کا نام کچھ بھی ہو سکتا ہے.

MySQL کے لئے Entity Framework Core پیکیج حاصل کریں

نیوگیٹ کے ساتھ اینٹیٹی فریم ورک کور استعمال کرنے کے لئے ایک پیکیج حاصل کریں۔ پیکیج استعمال کرتا ہے: یہ مائیکروسافٹ سے باضابطہ نہیں ہے ، لیکن یہ بڑے پیمانے پر استعمال ہوتا ہے۔

  • Pomelo.EntityFrameworkCore.MySql

انحصار پر دائیں کلک کریں اور نوگیٹ پیکیجز کا انتظام کریں منتخب کریں۔

ٹیب سے منتخب کردہ "براؤز" کے ساتھ ، سرچ فیلڈ Pomelo میں ٹائپ کریں۔ متعلقہ پیکیجوں کی فہرست ظاہر کی جائے گی.

اس سے مندرجہ ذیل پیکیجز انسٹال کریں:

  • Pomelo.EntityFrameworkCore.MySql

منتخب کریں کہ آپ کیا انسٹال کرنا چاہتے ہیں اور انسٹال بٹن پر کلک کریں۔ ورژن کے لئے تازہ ترین مستحکم ورژن منتخب کریں۔

ڈائیلاگ بنیادی طور پر ٹھیک اور ٹھیک ہے.

مجھے لگتا ہے کہ پیکیج مندرجہ ذیل ہے.

پھر سرچ فیلڈ میں ٹائپ EntityFrameworkCore کریں اور مندرجہ ذیل کو بھی انسٹال کریں۔

  • Microsoft.EntityFrameworkCore.Tools

ورژن کے لئے ، Pomelo.EntityFrameworkCore.MySql حوالہ کردہ ورژن سے Microsoft.EntityFrameworkCore میل کھائیں۔ اس بار ہم 8.0.2 کا حوالہ دے رہے ہیں ، لہذا Microsoft.EntityFrameworkCore.Tools آئیے اسے بھی 8.0.2 بنائیں۔ یہ پیکیج ڈیٹا بیس سے کوڈ پیدا کرنے کے لئے استعمال کیا جاتا ہے.

آخر میں، یہ اس طرح نظر آنا چاہئے:

ڈیٹا بیس ٹیبل ترتیب سے ایک ماڈل (کوڈ) بنائیں

اپنے ماڈل اور دیگر کوڈ کو خود بخود تیار کرنے کے لئے ، آپ کو پہلے اپنے منصوبے کو بنانا ہوگا تاکہ اس بات کو یقینی بنایا جاسکے کہ کوئی غلطی نہیں ہے۔ اگر کوئی غلطی ہے تو ، ماڈل ناکام ہوجائے گا۔ اگر آپ پہلے ہی تصدیق کر چکے ہیں کہ کوئی غلطی نہیں ہے تو ، آپ کو تعمیر کرنے کی ضرورت نہیں ہے۔

ویژول اسٹوڈیو سے پیکیج منیجر کنسول کھولیں۔ اگر نہیں تو ، آپ اسے مینو ٹولز ، نیوگیٹ پیکیج مینیجر ، اور پیکیج منیجر کنسول سے کھول سکتے ہیں۔

آپ کو نیچے دی گئی ونڈو کی طرح ایک ونڈو نظر آئے گی ، لہذا اس بات کو یقینی بنائیں کہ اوپری دائیں کونے میں "ڈیفالٹ پروجیکٹ" وہ پروجیکٹ ہے جس کے لئے آپ ماڈل بنانا چاہتے ہیں۔ (اگر آپ کے پاس متعدد منصوبے ہیں تو آپ کو محتاط رہنے کی ضرورت ہے)

ان پٹ فیلڈ میں درج ذیل متن درج کریں: پیرامیٹرز ماحول کے لحاظ سے تبدیل ہوں گے ، لہذا براہ کرم مندرجہ ذیل وضاحتوں کی بنیاد پر انہیں بروقت طریقے سے تبدیل کریں۔

Scaffold-DbContext "Server=<サーバー名>; Database=<スキーマ名>; user=<接続ユーザー名>;password=<接続パスワード>;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize

Input Example

Scaffold-DbContext "Server=TestServer; Database=test_schema; user=test_user;password=XXXXXXXX;" Pomelo.EntityFrameworkCore.MySql -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
پیرامیٹر وضاحت پیرامیٹر مثال
مہیاکار اگر یہ MySQL ہے Pomelo.EntityFrameworkCore.MySql ، تو اس طرح کی وضاحت کریں۔ Pomelo.EntityFrameworkCore.MySql
سلسلہ یہ ڈیٹا بیس سے جڑنے کے لئے کنکشن سٹرنگ ہے۔ کنکشن سٹرنگ کو دیگر ایپس میں استعمال کیا جاسکتا ہے ، لہذا براہ کرم کنکشن سٹرنگ کے نوٹیشن کے مطابق مخصوص مواد لکھیں۔ ویسے ، یہ صرف عارضی طور پر ایک ماڈل بنانے کے لئے استعمال ہوتا ہے ، لہذا اس کنکشن سٹرنگ کے لئے ایپ شائع کرنے کے بعد سیکیورٹی سے آگاہ ہونے کی ضرورت نہیں ہے۔ اگر آپ کے پاس ورڈ میں کوئی علامت ہے تو ، فرار کے بارے میں محتاط رہیں۔ "سرور = ٹیسٹ سرور; ڈیٹا بیس = test_schema۔ صارف = ٹیسٹ صارف; پاس ورڈ=XXXXXXXX;"
f اگر آپ کے پاس پہلے سے ہی کوئی پروگرام ہے تو بھی زبردستی لکھیں۔ کوئی <> نہیں
OutputDir کوڈ کو آؤٹ پٹ کرنے کے لئے فولڈر کا راستہ۔ پروجیکٹ فولڈر سے متعلقہ راستہ ماڈلز\Database
سیاق ادارہ فریم ورک استعمال کرتے وقت سیاق و سباق کلاس کے نام TestDatabaseDbContext
UseDatabaseNames اگر وضاحت کی گئی ہے تو ، ڈیٹا بیس میں جدول کا نام کلاس کا نام ہوگا جیسا کہ یہ ہے۔ اگر نہیں، تو ادارے کی کلاس کے نام کا معاملہ قواعد کے مطابق ایڈجسٹ کیا جاتا ہے. کوئی <> نہیں
DataAnnotations اگر وضاحت کی جائے تو ، کالم کی قسم خود بخود ہر پراپرٹی میں ڈیٹا تبصرہ کی خصوصیت شامل کرتی ہے۔ اگر آپ ڈیٹا بیس کی قسم کے مطابق خود بخود ان پٹ چیکنگ کرنا چاہتے ہیں تو یہ تھوڑا مفید ہے۔ کوئی <> نہیں
نام کی جگہ وہ نام کی جگہ جس سے پیدا ہونے والی اکائی کلاس کا تعلق ہے۔ اگر وضاحت نہیں کی گئی ہے تو ، نام کی جگہ کا تعین فولڈر کے مطابق کیا جاتا ہے۔ TestNamespace
ContextNamespace وہ نام کی جگہ جس سے پیدا کردہ سیاق و سباق کا تعلق ہے۔ اگر وضاحت نہیں کی گئی ہے تو ، نام کی جگہ کا تعین فولڈر کے مطابق کیا جاتا ہے۔ TestNamespace
NoOnConfiguring اپنے کوڈ میں خام کنکشن سٹرنگز شامل کرنے سے گریز کریں۔ کوئی <> نہیں
NoPluralize سیاق و سباق میں ہر جدول کے نام کے تکثیری پراپرٹی نام سے گریز کریں۔ کوئی <> نہیں

اسے چلانے اور کوڈ کو خود کار طریقے سے تیار کرنے کے لئے انٹر دبائیں: اگر یہ غلطی ہے تو، وجہ ظاہر کی جائے گی، لہذا براہ کرم غلطی کے مواد کے مطابق جواب دیں.

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 جدول میں ریکارڈ کو ہیرا پھیری کرسکتے ہیں۔ آپ کو جاری کردہ ایس کیو ایل سے آگاہ ہونے کی ضرورت نہیں ہے کیونکہ یہ اندرونی طور پر خود بخود پیدا ہوتا ہے۔

ToList یہاں ہم جدول میں تمام ریکارڈ حاصل کرنے کے لئے توسیع کا طریقہ استعمال user کر رہے ہیں۔

foreach اس کے بعد ، میں کنسول میں معلومات کو ظاہر کرنے کے لئے اور JsonSerializer.Serialize طریقوں کا استعمال user کرتا ہوں۔ جیسا کہ user اوپر ذکر کیا گیا ہے ، جدول میں ہر کالم کو پراپرٹی کے طور پر اعلان کیا گیا ہے ، لہذا انفرادی طور پر قیمت کو بازیافت کرنا بھی ممکن ہے۔