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

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

آپریٹنگ ماحول

Visual Studio
  • Visual Studio 2022
.جال
  • .NET 8
Entity Framework Core
  • Entity Framework Core 8.0
SQL Server
  • SQL Server 2022

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

سب سے پہلے

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

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

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

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

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

ایس کیو ایل سرور سیٹ اپ

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

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

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

اس بار، ہم مندرجہ ذیل ڈیٹا بیس اور ٹیبل کو مسٹر / مس کے طور پر بنائیں گے.

  • ڈیٹا بیس کا نام: TestDatabase
  • جدول کا نام: صارف
  • جدول کالم: [ID]، [نام]، [پاس ورڈ]، [عمر]، [ای میل]، [سالگرہ]، [تاریخ کا وقت اپ ڈیٹ]

آپ اسے کسی بھی طرح سے بنا سکتے ہیں ، لیکن اگر آپ ایسا نہیں کرنا چاہتے ہیں تو ، اسے پیدا کرنے کے لئے ایس کیو ایل سرور کے خلاف درج ذیل ایس کیو ایل چلائیں۔

مندرجہ ذیل ڈیٹا بیس تخلیق ایس کیو ایل ہے ، لیکن چونکہ ڈیٹا بیس تخلیق کا راستہ ورژن وغیرہ پر منحصر ہے ، لہذا اسے ایس کیو ایل کے بجائے جی یو آئی یا کمانڈ کے ساتھ بنانا زیادہ قابل اعتماد ہوسکتا ہے۔

USE [master]
GO
CREATE DATABASE [TestDatabase]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'TestDatabase', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDatabase.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'TestDatabase_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDatabase_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
 WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF
GO
ALTER DATABASE [TestDatabase] SET COMPATIBILITY_LEVEL = 160
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [TestDatabase].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [TestDatabase] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [TestDatabase] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [TestDatabase] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [TestDatabase] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [TestDatabase] SET ARITHABORT OFF 
GO
ALTER DATABASE [TestDatabase] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [TestDatabase] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [TestDatabase] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [TestDatabase] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [TestDatabase] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [TestDatabase] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [TestDatabase] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [TestDatabase] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [TestDatabase] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [TestDatabase] SET  DISABLE_BROKER 
GO
ALTER DATABASE [TestDatabase] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [TestDatabase] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [TestDatabase] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [TestDatabase] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [TestDatabase] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [TestDatabase] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [TestDatabase] SET HONOR_BROKER_PRIORITY OFF 
GO
ALTER DATABASE [TestDatabase] SET RECOVERY FULL 
GO
ALTER DATABASE [TestDatabase] SET  MULTI_USER 
GO
ALTER DATABASE [TestDatabase] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [TestDatabase] SET DB_CHAINING OFF 
GO
ALTER DATABASE [TestDatabase] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO
ALTER DATABASE [TestDatabase] SET TARGET_RECOVERY_TIME = 60 SECONDS 
GO
ALTER DATABASE [TestDatabase] SET DELAYED_DURABILITY = DISABLED 
GO
ALTER DATABASE [TestDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF  
GO
EXEC sys.sp_db_vardecimal_storage_format N'TestDatabase', N'ON'
GO
ALTER DATABASE [TestDatabase] SET QUERY_STORE = ON
GO
ALTER DATABASE [TestDatabase] SET QUERY_STORE (OPERATION_MODE = READ_WRITE, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30), DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_STORAGE_SIZE_MB = 1000, QUERY_CAPTURE_MODE = AUTO, SIZE_BASED_CLEANUP_MODE = AUTO, MAX_PLANS_PER_QUERY = 200, WAIT_STATS_CAPTURE_MODE = ON)
GO
ALTER DATABASE [TestDatabase] SET  READ_WRITE 
GO

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

USE [TestDatabase]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[User](
  [ID] [int] NOT NULL,
  [Name] [nvarchar](20) NOT NULL,
  [Password] [nvarchar](20) NOT NULL,
  [Age] [int] NULL,
  [Email] [nvarchar](200) NULL,
  [Birthday] [date] NULL,
  [UpdateDateTime] [datetime2](7) NULL,
  CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
  [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Record Append SQL.

USE [TestDatabase]
GO
INSERT [dbo].[User] ([ID], [Name], [Password], [Age], [Email], [Birthday], [UpdateDateTime]) VALUES (1, N'氏名1', N'aaaa', 20, N'aaaa@example.com', CAST(N'2020-04-01' AS Date), CAST(N'2021-03-14T00:00:00.0000000' AS DateTime2))
GO
INSERT [dbo].[User] ([ID], [Name], [Password], [Age], [Email], [Birthday], [UpdateDateTime]) VALUES (2, N'氏名2', N'bbbb', 30, N'bbbb@example.com', CAST(N'2010-04-01' AS Date), CAST(N'2021-03-14T00:00:00.0000000' AS DateTime2))
GO

Visual Studio Setup

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

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

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

نئے منصوبے میں ، کنسول ایپ منتخب کریں۔

منصوبہ بنایا گیا ہے. اس سے کوئی فرق نہیں پڑتا کہ منصوبے کا نام کیا ہے.

اینٹیٹی فریم ورک کور پیکج حاصل کریں

نیوگیٹ کے ساتھ اینٹیٹی فریم ورک کور استعمال کرنے کے لئے ایک پیکیج حاصل کریں۔

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

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

چونکہ ہم اس بار ایس کیو ایل سرور استعمال کریں گے ، لہذا ہم مندرجہ ذیل پیکیج انسٹال کریں گے۔

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore اس مثال میں، ہم انسٹال کر رہے ہیں. دوسرے دو کو بھی انسٹال کریں۔

انسٹالیشن کا ہدف منتخب کریں اور انسٹال بٹن پر کلک کریں۔ ورژن کے لئے ، تازہ ترین مستحکم منتخب کریں۔

ڈائیلاگ بنیادی طور پر ٹھیک ہے اور آپ ٹھیک پر کلک کرسکتے ہیں۔

دوسرے دو کو بھی انسٹال کریں۔

مجھے لگتا ہے کہ پیکیج اس طرح نظر آتا ہے:

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

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

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

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

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

Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=<サーバー名>\<インスタンス名>;Database=<データメース名>;user id=<接続ユーザー名>;password=<接続パスワード>;TrustServerCertificate=true" -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize

مثال ان پٹ

Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=TestServer;Database=TestDatabase;user id=TestUser;password=pass;TrustServerCertificate=true" -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
پیرامیٹر کی وضاحت پیرامیٹر example
مہیاکار ایس کیو ایل سرور کے لئے ، یہ طے Microsoft.EntityFrameworkCore.SqlServer شدہ ہے۔ Microsoft.EntityFrameworkCore.SqlServer
سلسلہ ڈیٹا بیس سے جڑنے کے لئے کنکشن سٹرنگ۔ کنکشن سٹرنگز کو دیگر ایپس کے ساتھ عام طور پر استعمال کیا جاسکتا ہے ، لہذا براہ کرم مواد کی وضاحت کے لئے کنکشن سٹرنگز کی نشاندہی پر عمل کریں۔ آپ ونڈوز توثیق یا ایس کیو ایل سرور توثیق استعمال کرسکتے ہیں۔ ویسے ، یہ صرف عارضی طور پر ایک ماڈل بنانے کے لئے استعمال ہوتا ہے ، لہذا اس کنکشن سٹرنگ کے لئے ایپلی کیشن شائع کرنے کے بعد سیکیورٹی سے آگاہ ہونے کی ضرورت نہیں ہے۔ اگر آپ کے پاس ورڈ میں علامتیں ہیں تو ، فرار ہونے سے محتاط رہیں۔ "ڈیٹا سورس = سرور کا نام\ایس کیو ایل ایکسپریس۔ ڈیٹا بیس = ٹیسٹ ڈیٹا بیس۔ صارف id=صارف نام; پاس ورڈ=**********"
f یہاں تک کہ اگر پروگرام پہلے سے موجود ہے تو ، اسے زبردستی اوور رائٹ کیا جائے گا۔ کوئی <> نہیں
OutputDir فولڈر کا راستہ جہاں آپ کوڈ کو آؤٹ پٹ کرنا چاہتے ہیں۔ پروجیکٹ فولڈر سے متعلق راستہ ماڈلز\Database
سیاق ادارے کے فریم ورک کا استعمال کرتے وقت سیاق و سباق کلاس کے نام TestDatabaseDbContext
UseDatabaseNames اگر وضاحت کی گئی ہے تو ، ڈیٹا بیس کا جدول نام کلاس کا نام ہوگا جیسا کہ یہ ہے۔ اگر وضاحت نہیں کی گئی ہے تو ، ادارے کی کلاس کے نام کا معاملہ قواعد کے مطابق ایڈجسٹ کیا جاتا ہے۔ کوئی <> نہیں
DataAnnotations جب وضاحت کی جاتی ہے تو ، کالم کی قسم خود بخود ہر پراپرٹی میں ڈیٹا تبصرہ کی خصوصیت شامل کرتی ہے۔ اگر آپ ڈیٹا بیس کی قسم کے مطابق خود بخود ان پٹ چیک کرنا چاہتے ہیں تو یہ تھوڑا مفید ہے۔ کوئی <> نہیں
نام کی جگہ وہ نام کی جگہ جس سے پیدا ہونے والی اکائی کلاس کا تعلق ہے۔ اگر وضاحت نہیں کی گئی ہے تو ، نام کی جگہ کا تعین فولڈر کے مطابق کیا جاتا ہے۔ TestNamespace
ContextNamespace وہ نام کی جگہ جس سے پیدا کردہ سیاق و سباق کا تعلق ہے۔ اگر وضاحت نہیں کی گئی ہے تو ، نام کی جگہ کا تعین فولڈر کے مطابق کیا جاتا ہے۔ TestNamespace
NoOnConfiguring اپنے کوڈ میں خام کنکشن سٹرنگز شامل نہ کریں۔ کوئی <> نہیں
NoPluralize اس بات کو یقینی بنائیں کہ سیاق و سباق میں ہر جدول کے نام کے لئے جائیداد کے نام تکثیری نہیں ہیں۔ کوئی <> نہیں

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

User جدول کا ماڈل کوڈ درج ذیل ہے۔

using System.ComponentModel.DataAnnotations;

namespace SetupSqlServerDatabaseFirst.Models.Database;

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; } = null!;

  public int? Age { get; set; }

  [StringLength(200)]
  public string? Email { get; set; }

  public DateOnly? Birthday { get; set; }

  public DateTime? UpdateDateTime { get; set; }
}

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

ریکارڈ کو بازیافت کرنے اور ظاہر کرنے کی کوشش کریں

اب جب کہ ہمارے پاس ڈیٹا بیس میں ریکارڈز تک رسائی حاصل کرنے کے لئے کوڈ ہے ، آئیے ریکارڈز کو بازیافت کرنے اور انہیں کنسول پر ظاہر کرنے کی کوشش کریں۔

Program.cs اور اس میں حسب ذیل ترمیم کریں۔

// See https://aka.ms/new-console-template for more information
using SetupSqlServerDatabaseFirst.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 باقی کنسول پر معلومات کو ظاہر کرنے کے طریقوں User اور JsonSerializer.Serialize طریقوں کا استعمال کرتے ہوئے کیا جاتا ہے۔ جیسا کہ User اوپر ذکر کیا گیا ہے ، جدول میں ہر کالم کو پراپرٹی کے طور پر اعلان کیا گیا ہے ، لہذا انفرادی طور پر قیمت کو بازیافت کرنا ممکن ہے۔