اینٹیٹی فریم ورک کور (ڈیٹا بیس-فرسٹ) کا استعمال کرتے ہوئے ایس کیو ایل سرور تک رسائی حاصل کرنے کے لئے تیار کریں
آپریٹنگ ماحول
- 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
اوپر ذکر کیا گیا ہے ، جدول میں ہر کالم کو پراپرٹی کے طور پر اعلان کیا گیا ہے ، لہذا انفرادی طور پر قیمت کو بازیافت کرنا ممکن ہے۔