Code First Approach

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework)
209
209

Code First কী?

Code First একটি পদ্ধতি, যেখানে ডেভেলপাররা প্রথমে C# বা VB.NET কোডে ক্লাস (এবং মডেল) তৈরি করেন, এবং তারপর Entity Framework (EF) এই কোড থেকে ডেটাবেস স্কিমা তৈরি করে। এটি ORM এর একটি গুরুত্বপূর্ণ অংশ, যেখানে ডেভেলপাররা ডেটাবেসের কাঠামো (schema) তৈরি করার আগে কোড লেখেন এবং EF সেই কোড থেকে ডেটাবেস তৈরি করে বা মাইগ্রেট করে।

Code First Approach সাধারণত ছোট অ্যাপ্লিকেশন বা নতুন প্রজেক্টগুলিতে ব্যবহৃত হয়, যেখানে ডেটাবেস স্কিমা শুরু থেকেই কোডের মধ্যেই নির্ধারিত হয় এবং সময়ের সাথে সাথে কোড এবং ডেটাবেসের মধ্যে সিঙ্ক্রোনাইজেশন রক্ষা করা হয়।


Code First এর সুবিধা

  • ডেটাবেস নিরপেক্ষতা: ডেভেলপাররা ডেটাবেসের কাঠামো সম্পর্কে চিন্তা না করে প্রথমে কোড তৈরি করতে পারেন, এবং পরে EF ডেটাবেস স্কিমা তৈরি করে।
  • কমপ্লেক্স কনফিগারেশন প্রয়োজনে Fluent API বা Data Annotations ব্যবহার: আপনি প্রয়োজন অনুযায়ী মডেল কনফিগারেশন করতে Fluent API বা Data Annotations ব্যবহার করতে পারেন।
  • ডেভেলপমেন্টের সহজ প্রক্রিয়া: কোড লেখার পর ডেটাবেস তৈরি হয়ে গেলে, তা ডেভেলপারদের জন্য খুব সহজ করে তোলে ডেটাবেসে পরিবর্তন আনা বা মাইগ্রেশন পরিচালনা করা।
  • Migrations Support: EF Code First মাইগ্রেশন সাপোর্ট করে, যা ডেটাবেস স্কিমার পরিবর্তন এবং আপডেট সহজ করে তোলে।

Code First এর কাজ করার পদ্ধতি

Code First অ্যাপ্রোচটি মূলত দুটি প্রধান ধাপে কাজ করে: ডোমেইন মডেল তৈরি এবং ডেটাবেস তৈরি বা আপডেট

1. ডোমেইন মডেল তৈরি

প্রথমে আপনি C# কোডে মডেল ক্লাস তৈরি করবেন, যেখানে ক্লাসের প্রপার্টি গুলি ডেটাবেসের কলাম হিসাবে কাজ করবে। উদাহরণস্বরূপ:

public class Student
{
    public int Id { get; set; }  // Primary Key
    public string Name { get; set; }
    public int Age { get; set; }
}

এখানে, Student ক্লাসটি ডেটাবেসের Students টেবিলের মতো কাজ করবে, এবং Id, Name, Age এর মতো প্রপার্টিগুলি টেবিলের কলাম হিসাবে মডেল হবে।

2. DbContext তৈরি

DbContext একটি ক্লাস যা EF কে ডেটাবেসের সাথে যোগাযোগ করার অনুমতি দেয়। এটি ডেটাবেস টেবিলগুলির প্রতিনিধিত্বকারী DbSet প্রপার্টিগুলি ধারণ করে। উদাহরণস্বরূপ:

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

এখানে, SchoolContext ক্লাসটি ডেটাবেসের সাথে সংযুক্ত, এবং Students একটি DbSet যা ডেটাবেসে Student ক্লাসের প্রতিনিধিত্ব করবে।

3. ডেটাবেস তৈরি বা আপডেট করা (Migrations)

এবার আপনি ডোমেইন মডেল ও DbContext তৈরি করার পর, Entity Framework এর মাধ্যমে ডেটাবেস তৈরি বা মাইগ্রেট করতে পারেন। মাইগ্রেশন ব্যবহারের জন্য নিচের কমান্ডগুলি ব্যবহার করা হয়:

  • প্রথমে মাইগ্রেশন অ্যাড করতে হবে:

    Add-Migration InitialCreate
    
  • তারপর ডেটাবেস আপডেট করতে হবে:

    Update-Database
    

এটি EF কে বলে দিবে যে নতুন ডেটাবেস স্কিমা তৈরি করতে হবে এবং মাইগ্রেশন অনুযায়ী আপডেট করতে হবে।


Code First Approach এ Model Configuration

Code First এ মডেল কনফিগারেশন করার দুটি মূল উপায় রয়েছে: Data Annotations এবং Fluent API

1. Data Annotations

Data Annotations হল কিছু বিশেষ অ্যাট্রিবিউট যা ক্লাস এবং প্রপার্টির উপরে অ্যাপ্লাই করা হয়, যাতে তাদের বৈশিষ্ট্য এবং সম্পর্ক ডেটাবেসের সাথে সঠিকভাবে ম্যাপ হয়। উদাহরণস্বরূপ:

public class Student
{
    [Key]
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Range(1, 100)]
    public int Age { get; set; }
}

এখানে, [Key] অ্যাট্রিবিউট Id প্রপার্টিকে প্রাইমারি কী হিসেবে চিহ্নিত করেছে, [Required] অ্যাট্রিবিউট Name প্রপার্টি কে বাধ্যতামূলক করেছে এবং [StringLength(50)] অ্যাট্রিবিউট এর দৈর্ঘ্য সীমাবদ্ধ করেছে।

2. Fluent API

Fluent API একে অপরের সাথে সোজা ও চেইনযোগ্য মেথড কলিং স্টাইল ব্যবহার করে কনফিগারেশন তৈরি করার পদ্ধতি। এটি অনেক সময় ব্যবহার করা হয় যখন Data Annotations যথেষ্ট নয়। উদাহরণস্বরূপ:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>()
        .Property(s => s.Name)
        .HasMaxLength(50)
        .IsRequired();
}

এই Fluent API কনফিগারেশনটি Name প্রপার্টি কে ৫০ ক্যারেক্টারের মধ্যে সীমাবদ্ধ করবে এবং এটিকে Required হিসেবে চিহ্নিত করবে।


Code First Approach এর সুবিধা

  • উদ্ভাবনী ও নমনীয়: কোড ভিত্তিক অ্যাপ্রোচে ডেটাবেস তৈরি ও আপডেটের জন্য কমপ্লেক্স SQL কোড লেখার প্রয়োজন পড়ে না। এটি ডেভেলপারদের ডেটাবেসের স্কিমা কোডের মাধ্যমে নিয়ন্ত্রণ করতে সাহায্য করে।
  • ডেভেলপমেন্টে সহায়ক: মডেল তৈরির মাধ্যমে আপনি খুব সহজেই আপনার ডেটাবেসের কাঠামো নির্ধারণ করতে পারেন এবং সেগুলি ডেভেলপমেন্টের সময় প্রয়োগ করতে পারেন।
  • Migrations Support: EF Code First সিস্টেম মাইগ্রেশন সাপোর্ট করে, ফলে ডেটাবেস স্কিমা পরিবর্তন ট্র্যাক করা এবং প্রয়োজন হলে সহজে আপডেট করা যায়।

Code First এবং Database First এর মধ্যে পার্থক্য

বৈশিষ্ট্যCode FirstDatabase First
ডেটাবেস সৃষ্টিকোড লেখার মাধ্যমে ডেটাবেস তৈরি হয়।ডেটাবেস আগে তৈরি করতে হয়, তারপর কোড জেনারেট হয়।
ডেভেলপার নিয়ন্ত্রণকোডে পূর্ণ নিয়ন্ত্রণ, ডেটাবেস স্কিমা কোড দ্বারা নির্ধারিত।ডেটাবেসের স্কিমা আগেই নির্ধারিত, কোড তার সাথে সিঙ্ক হয়।
ডেটাবেস মডেল পরিবর্তনকোড পরিবর্তন করে মডেল পরিবর্তন করা যায়।ডেটাবেস পরিবর্তন করে কোডের মডেল আপডেট করতে হয়।
ব্যবহার উপযুক্তনতুন প্রজেক্টে, সহজ ডেটাবেস ডিজাইন ও কনফিগারেশন।যখন ডেটাবেস পূর্বে তৈরি এবং তা নিয়ে কাজ করতে হয়।

Code First Approach ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা ডেটাবেস স্কিমা এবং কোডের মধ্যে সুসংগতি বজায় রাখতে সহায়তা করে, বিশেষ করে ছোট বা নতুন প্রজেক্টগুলিতে।

common.content_added_by

Code First কী এবং এর সুবিধা

182
182

Code First পদ্ধতিতে ডেভেলপাররা ডেটাবেসের কাঠামো (schema) কোডের মাধ্যমে তৈরি করেন, এবং Entity Framework (EF) সেই কোডের ভিত্তিতে ডেটাবেস তৈরি বা মাইগ্রেট করে। এর মানে হল যে প্রথমে আপনি C# ক্লাস বা মডেল তৈরি করবেন, পরে EF এই ক্লাসগুলোকে ডেটাবেস টেবিল ও কলামে রূপান্তর করবে। Code First অ্যাপ্রোচ ডেভেলপারদের মডেল ক্লাসগুলোর মাধ্যমে ডেটাবেসের কাঠামো নিয়ন্ত্রণ করার সুযোগ দেয়, এবং এভাবে আপনি ম্যানুয়ালি ডেটাবেস ডিজাইন করার প্রয়োজন ছাড়াই কোডের মধ্য দিয়েই ডেটাবেস পরিচালনা করতে পারেন।


Code First এর সুবিধা

১. ডেটাবেস নিরপেক্ষতা

Code First পদ্ধতিতে ডেটাবেসের কাঠামো সম্পূর্ণভাবে কোডের উপর নির্ভরশীল, তাই আপনাকে ডেটাবেস ডিজাইন করতে বা পরিবর্তন করতে কোন অতিরিক্ত টুলস বা সফটওয়্যার ব্যবহার করতে হয় না। আপনি শুধুমাত্র ক্লাসগুলো ডিজাইন করেন এবং Entity Framework সেগুলোকে ডেটাবেস টেবিল ও কলামে রূপান্তরিত করে।

২. মাইগ্রেশন সুবিধা

Code First মাইগ্রেশন ফিচারটি ডেটাবেসের কাঠামোতে যেকোনো পরিবর্তন বা আপডেট সহজ করে তোলে। আপনি যখন কোডে পরিবর্তন করবেন (যেমন নতুন প্রপার্টি যোগ করা বা মডেল পরিবর্তন), তখন EF এই পরিবর্তনগুলো ডেটাবেসে সিঙ্ক করার জন্য মাইগ্রেশন তৈরি করতে পারে, যা Add-Migration এবং Update-Database কমান্ড দিয়ে করা হয়।

৩. নমনীয়তা

Code First অ্যাপ্রোচ ডেভেলপারদের জন্য খুব নমনীয়, কারণ আপনি কোডের মাধ্যমে ডেটাবেস মডেল নিয়ন্ত্রণ করতে পারেন। বিভিন্ন ধরনের ডেটাবেস কনফিগারেশন (যেমন টেবিল নাম, প্রাইমারি কী, সম্পর্ক ইত্যাদি) Fluent API অথবা Data Annotations ব্যবহার করে করা যায়।

৪. প্রথমে কোড লিখে ডেটাবেস তৈরি

Code First অ্যাপ্রোচে, আপনি প্রথমে কোড লিখে শুরু করতে পারেন, তারপর ডেটাবেস তৈরি বা আপডেট করতে পারেন। এটি নতুন অ্যাপ্লিকেশন বা প্রকল্পের জন্য আদর্শ, যেখানে আপনি ডেটাবেসের কাঠামো কোডের মধ্যে সম্পূর্ণভাবে সংজ্ঞায়িত করতে চান।

৫. ডেটাবেসের সাথে পরিবর্তন সহজে সিঙ্ক করা

Code First মাইগ্রেশন ব্যবহারের মাধ্যমে, আপনি কোডে পরিবর্তন আনার পর ডেটাবেসের কাঠামো আপডেট করতে পারেন, এবং কোনো রকম ডেটা হারানোর ঝুঁকি ছাড়াই ডেটাবেস ম্যানেজমেন্ট করতে পারেন। EF স্বয়ংক্রিয়ভাবে নতুন মাইগ্রেশন এবং সিঙ্ক করতে সহায়তা করে।


এই সব সুবিধার কারণে, Code First পদ্ধতি নতুন অ্যাপ্লিকেশন উন্নয়নের জন্য অত্যন্ত উপযুক্ত, যেখানে কোডের মাধ্যমে ডেটাবেস কাঠামো তৈরি ও আপডেট করার জন্য নমনীয়তা এবং সহজতর সমাধান প্রয়োজন।

common.content_added_by

Entity Class তৈরি করা এবং DbContext ব্যবহার করা

224
224

Entity Framework-এ Code First অ্যাপ্রোচ ব্যবহার করলে, প্রথমে আপনাকে Entity Class তৈরি করতে হয়, যা আপনার ডেটাবেসের টেবিলগুলির প্রতিনিধিত্ব করবে। এরপর, এই Entity Class-এর সাথে সম্পর্কযুক্ত DbContext ক্লাস তৈরি করতে হয়, যা ডেটাবেসের সাথে যোগাযোগ এবং CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করবে।

এখানে Entity Class এবং DbContext তৈরির প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হলো।


Entity Class তৈরি করা

Entity Class হলো একটি C# ক্লাস যা ডেটাবেস টেবিলের একটি একক এন্টিটি বা রেকর্ডের প্রতিনিধিত্ব করে। এর মধ্যে প্রপার্টি গুলি ডেটাবেসের টেবিলের কলামের মতো কাজ করে।

Entity Class উদাহরণ

ধরা যাক, আমরা একটি "Student" নামক Entity Class তৈরি করতে যাচ্ছি, যেখানে ছাত্রের Id, Name এবং Age থাকবে। Entity Classটি দেখতে এরকম হবে:

public class Student
{
    public int Id { get; set; } // Primary Key
    public string Name { get; set; }
    public int Age { get; set; }
}

এখানে:

  • Id প্রপার্টিটি ডেটাবেসের প্রাইমারি কী (Primary Key) হিসেবে কাজ করবে।
  • Name এবং Age প্রপার্টি দুটি টেবিলের কলাম হিসেবে কাজ করবে।

এটি Entity Framework এর জন্য একটি Entity Class, যা ডেটাবেসের একটি টেবিলের প্রতিনিধিত্ব করে।

Entity Class-এ Data Annotations ব্যবহার

এছাড়া, আপনি Data Annotations ব্যবহার করে Entity Class-এ কিছু কনফিগারেশনও দিতে পারেন, যেমন:

public class Student
{
    [Key]
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Range(5, 100)]
    public int Age { get; set; }
}

এখানে:

  • [Key]: Id প্রপার্টি কে প্রাইমারি কী হিসেবে চিহ্নিত করছে।
  • [Required]: Name প্রপার্টি এখন বাধ্যতামূলক হয়ে গেছে।
  • [StringLength(100)]: Name এর সর্বোচ্চ দৈর্ঘ্য 100 অক্ষর হবে।
  • [Range(5, 100)]: Age প্রপার্টি ৫ থেকে ১০০ এর মধ্যে থাকতে হবে।

এভাবে, Data Annotations দিয়ে Entity Class এর মধ্যে কনফিগারেশন করা হয়।


DbContext ব্যবহার করা

DbContext হলো Entity Framework-এর প্রধান ক্লাস যা ডেটাবেসের সাথে যোগাযোগ করে এবং Entity ক্লাসগুলোর প্রতিনিধিত্বকারী DbSet প্রপার্টি ধারণ করে। DbContext-ই ডেটাবেস অপারেশনগুলিকে পরিচালনা করে।

DbContext ক্লাস তৈরি করা

DbContext তৈরি করতে হলে, আপনাকে একটি ক্লাস তৈরি করতে হবে যা DbContext ক্লাস থেকে উত্তরাধিকারী (inherit) হবে এবং সেই ক্লাসে DbSet প্রপার্টি ডিফাইন করতে হবে। প্রতিটি DbSet একটি Entity Class এর প্রতিনিধিত্ব করে এবং এটি ডেটাবেসের একটি টেবিলের মতো কাজ করে।

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

এখানে:

  • SchoolContext একটি DbContext ক্লাস যা ডেটাবেসের সাথে যোগাযোগ করে।
  • DbSet<Student> প্রপার্টি একটি টেবিল হিসেবে Student Entity Class-এর প্রতিনিধিত্ব করবে।

DbContext কনফিগারেশন

DbContext-এ আপনি OnConfiguring মেথডও ওভাররাইড করে ডেটাবেসের কানেকশন স্ট্রিং কনফিগার করতে পারেন। উদাহরণস্বরূপ:

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("your_connection_string_here");
    }
}

এখানে UseSqlServer মেথডের মাধ্যমে আমরা SQL Server ডেটাবেসের কানেকশন স্ট্রিং উল্লেখ করছি। আপনি এখানে অন্য ডেটাবেস (যেমন SQLite, PostgreSQL ইত্যাদি) ব্যবহার করার জন্য উপযুক্ত মেথড ব্যবহার করতে পারেন।


DbContext ব্যবহার করে ডেটাবেস অপারেশন

DbContext ব্যবহার করে আমরা ডেটাবেসে CRUD অপারেশন করতে পারি। নিচে একটি সাধারণ উদাহরণ দেয়া হলো, যেখানে আমরা Student Entity ক্লাস ব্যবহার করে ডেটাবেসে একটি নতুন Student যুক্ত করব এবং তা রিড (read) করব।

Create Operation (Create নতুন Student)

using (var context = new SchoolContext())
{
    var student = new Student
    {
        Name = "John Doe",
        Age = 21
    };

    context.Students.Add(student);
    context.SaveChanges();  // ডেটাবেসে পরিবর্তন সংরক্ষণ
}

এখানে:

  • Add() মেথড ব্যবহার করে আমরা নতুন Student যুক্ত করছি।
  • SaveChanges() মেথড ব্যবহার করে ডেটাবেসে পরিবর্তন সংরক্ষণ করা হচ্ছে।

Read Operation (ডেটাবেস থেকে Student পড়া)

using (var context = new SchoolContext())
{
    var student = context.Students.FirstOrDefault(s => s.Name == "John Doe");
    Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}

এখানে:

  • FirstOrDefault() মেথড ব্যবহার করে আমরা Name দ্বারা Student খুঁজে পাচ্ছি।

DbContext এবং Entity Class এর সম্পর্ক

  • Entity Class: এটি একটি C# ক্লাস যা আপনার ডেটাবেস টেবিলের এক একটি রেকর্ডের প্রতিনিধিত্ব করে।
  • DbContext: এটি ডেটাবেস এবং Entity ক্লাসের মধ্যে যোগাযোগ স্থাপন করে। DbContext এর মধ্যে আপনার Entity Class গুলি DbSet প্রপার্টি হিসেবে সংরক্ষিত থাকে এবং আপনি এই প্রপার্টি ব্যবহার করে CRUD অপারেশন পরিচালনা করতে পারেন।

এভাবে Entity Class এবং DbContext ব্যবহার করে আপনি Entity Framework Code First অ্যাপ্রোচে ডেটাবেস ম্যানেজমেন্ট করতে পারেন।

common.content_added_by

Database Initialization এবং Data Migrations

207
207

Entity Framework (EF) ব্যবহার করার সময়, ডেটাবেস তৈরি এবং আপডেট করার জন্য Database Initialization এবং Data Migrations দুটি গুরুত্বপূর্ণ প্রক্রিয়া। এই প্রক্রিয়াগুলো আপনাকে ডেটাবেসের স্কিমা (structure) এবং ডেটা পরিচালনার জন্য সাহায্য করে, যাতে আপনি সহজে ডেটাবেসের পরিবর্তন পরিচালনা করতে পারেন এবং অ্যাপ্লিকেশন চালানোর সময় ডেটাবেসে স্বয়ংক্রিয়ভাবে আপডেট বা ইনিশিয়ালাইজেশন করতে পারেন।


Database Initialization

Database Initialization এর মাধ্যমে, ডেটাবেসটি প্রথমবারের মতো তৈরি করা হয়, অথবা ডেটাবেসে কিছু ডিফল্ট ডেটা ইনজেক্ট করা হয়। EF তে এই ইনিশিয়ালাইজেশন প্রক্রিয়া DatabaseInitializer বা DbContext এর মাধ্যমে পরিচালিত হয়।

Database Initialization এর বিভিন্ন অপশন

  1. CreateDatabaseIfNotExists
    এটি ডিফল্ট ইনিশিয়ালাইজার, যা নিশ্চিত করে যে ডেটাবেসটি যদি আগে থেকে না থাকে, তবে সেটি স্বয়ংক্রিয়ভাবে তৈরি হবে।

    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer(new CreateDatabaseIfNotExists<MyDbContext>());
        }
    }
    
  2. DropCreateDatabaseIfModelChanges
    এই অপশনটি ব্যবহার করলে, যখন মডেলের কোন পরিবর্তন হবে (যেমন Entity Class এ কোনো প্রোপার্টি যুক্ত করা বা মুছে ফেলা), তখন পুরোনো ডেটাবেসটি ডিলিট করে নতুন ডেটাবেস তৈরি হবে।

    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
        }
    }
    
  3. DropCreateDatabaseAlways
    এই অপশনটি ব্যবহার করলে, প্রতিবার অ্যাপ্লিকেশন চালু হলে ডেটাবেসটি ডিলিট হয়ে আবার তৈরি হবে, এটি সাধারণত টেস্টিং বা ডেভেলপমেন্ট সময় ব্যবহৃত হয়।

    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
        }
    }
    
  4. Custom Database Initializer
    আপনি নিজের কাস্টম ইনিশিয়ালাইজারও তৈরি করতে পারেন, যা প্রয়োজন অনুযায়ী ডেটাবেস তৈরির সময় নির্দিষ্ট কিছু কাস্টমাইজেশন করতে সাহায্য করে।

    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer(new CustomDatabaseInitializer());
        }
    }
    
    public class CustomDatabaseInitializer : IDatabaseInitializer<MyDbContext>
    {
        public void InitializeDatabase(MyDbContext context)
        {
            if (!context.Database.Exists())
            {
                context.Database.Create();
                // Additional custom logic (e.g., seeding data)
            }
        }
    }
    

Data Migrations

Data Migrations Entity Framework এর একটি অত্যন্ত শক্তিশালী ফিচার, যার মাধ্যমে ডেটাবেস স্কিমার পরিবর্তন এবং আপডেট খুব সহজে পরিচালনা করা যায়। যখন আপনি আপনার Entity Model (class) বা DbContext এ কোনো পরিবর্তন করেন, তখন Data Migrations এর মাধ্যমে ডেটাবেসের সংশ্লিষ্ট পরিবর্তনগুলো ট্র্যাক এবং আপডেট করা হয়।

Migrations ব্যবহার করার জন্য প্রথমে Enable Migrations চালু করতে হয়।

  1. Migrations Enable করা
    Package Manager Console এ নিচের কমান্ডটি ব্যবহার করুন:

    Enable-Migrations
    

    এই কমান্ডটি আপনার প্রোজেক্টে একটি Migrations ফোল্ডার তৈরি করবে, যেখানে মাইগ্রেশন সংক্রান্ত ফাইলগুলো রাখা হবে।

  2. New Migration Create করা
    যখন আপনি আপনার Entity বা DbContext ক্লাসে কোনো পরিবর্তন করবেন (যেমন নতুন টেবিল বা কলাম যোগ করা), তখন নতুন মাইগ্রেশন তৈরি করতে হবে। এটি করতে নিচের কমান্ডটি ব্যবহার করুন:

    Add-Migration InitialCreate
    

    এখানে InitialCreate হচ্ছে মাইগ্রেশনের নাম, যা আপনি আপনার প্রয়োজনে পরিবর্তন করতে পারেন। মাইগ্রেশন ফাইলটি Migrations ফোল্ডারে তৈরি হবে এবং এটি ডেটাবেসের পরিবর্তনগুলো ট্র্যাক করবে।

  3. Database Update করা
    নতুন মাইগ্রেশন তৈরি করার পর, আপনি ডেটাবেস আপডেট করার জন্য নিচের কমান্ডটি ব্যবহার করতে পারেন:

    Update-Database
    

    এটি আপনার ডেটাবেসকে বর্তমান মডেল এবং মাইগ্রেশন অনুযায়ী আপডেট করবে।

  4. Rollback করা
    যদি আপনি কোনো মাইগ্রেশন এর আগে ফিরে যেতে চান, তাহলে Update-Database কমান্ডের সঙ্গে -TargetMigration প্যারামিটার ব্যবহার করে পূর্ববর্তী মাইগ্রেশনে ফিরে যেতে পারেন:

    Update-Database -TargetMigration: "PreviousMigration"
    

Data Migrations এর উন্নত ব্যবহার

  • Data Seeding: মাইগ্রেশন প্রক্রিয়ার সাথে আপনি ডিফল্ট ডেটা ইনসার্ট করতে পারেন, যা ডেটাবেস তৈরি বা আপডেটের সময় স্বয়ংক্রিয়ভাবে ইনজেক্ট হবে। এর জন্য মাইগ্রেশন ফাইলে Seed মেথড ব্যবহার করা হয়।

    protected override void Seed(MyDbContext context)
    {
        context.Users.AddOrUpdate(u => u.UserId, new User { Name = "John Doe", Email = "john@example.com" });
    }
    
  • Automatic Migrations: EF 6 এর Automatic Migrations ফিচারের মাধ্যমে আপনি মাইগ্রেশনগুলিকে স্বয়ংক্রিয়ভাবে পরিচালনা করতে পারেন। এটি ডেটাবেসের পরিবর্তনগুলিকে স্বয়ংক্রিয়ভাবে ট্র্যাক করে এবং আপনাকে ম্যানুয়ালি মাইগ্রেশন তৈরি করতে হবে না।

সারাংশ

Database Initialization এবং Data Migrations হল Entity Framework এ ডেটাবেস পরিচালনার অত্যন্ত গুরুত্বপূর্ণ টুল। ডেটাবেস তৈরি বা আপডেট করার জন্য EF এর মাইগ্রেশন ব্যবস্থাপনা ব্যবহার করা খুবই কার্যকরী। মাইগ্রেশন এবং ইনিশিয়ালাইজেশন ব্যবহারের মাধ্যমে ডেভেলপাররা দ্রুত এবং নিরাপদভাবে ডেটাবেসের পরিবর্তনগুলি পরিচালনা করতে পারেন, ফলে অ্যাপ্লিকেশনের ডেভেলপমেন্ট প্রক্রিয়া অনেক বেশি কার্যকরী ও অটোমেটেড হয়ে ওঠে।

common.content_added_by

Fluent API এবং Data Annotation দিয়ে Model Configuration

202
202

Entity Framework (EF) ব্যবহার করার সময়, ডেটাবেস মডেল কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। আপনি Entity Framework-এর মাধ্যমে ডেটাবেস স্কিমা কনফিগার করার জন্য দুটি প্রধান পদ্ধতি ব্যবহার করতে পারেন: Fluent API এবং Data Annotation। দুটি পদ্ধতিই মডেল ক্লাসের বিভিন্ন বৈশিষ্ট্য নির্ধারণ করতে সাহায্য করে, তবে তাদের ব্যবহার এবং কার্যকারিতায় কিছু পার্থক্য রয়েছে। এই টিউটোরিয়ালে, আমরা Fluent API এবং Data Annotation এর মাধ্যমে Entity Framework মডেল কনফিগার করার পদ্ধতি আলোচনা করব।


Data Annotation দিয়ে Model Configuration

Data Annotation হল একটি সিম্পল এবং ডেকোরেটিভ পদ্ধতি, যা মডেল ক্লাসের প্রপার্টিতে অটোমেটিক কনফিগারেশন যুক্ত করতে ব্যবহৃত হয়। এটি মূলত ক্লাস এবং প্রপার্টি লেভেলে অ্যাট্রিবিউট ব্যবহার করে মডেল কনফিগার করে।

Data Annotation এর কিছু গুরুত্বপূর্ণ অ্যাট্রিবিউট

  1. [Key]: এটি প্রপার্টিকে Primary Key হিসেবে চিহ্নিত করে।

    public class Student
    {
        [Key]
        public int StudentId { get; set; }
    }
    
  2. [Required]: প্রপার্টি অবশ্যই পূর্ণ করতে হবে।

    public class Student
    {
        public int StudentId { get; set; }
        [Required]
        public string Name { get; set; }
    }
    
  3. [StringLength]: একটি প্রপার্টির সর্বোচ্চ বা সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করে।

    public class Student
    {
        public int StudentId { get; set; }
        [StringLength(100, MinimumLength = 3)]
        public string Name { get; set; }
    }
    
  4. [Column]: প্রপার্টির জন্য কাস্টম কলাম নাম নির্ধারণ করে।

    public class Student
    {
        [Column("Student_Name")]
        public string Name { get; set; }
    }
    
  5. [ForeignKey]: একটি প্রপার্টি ফোরেন কী (Foreign Key) হিসেবে কাজ করবে তা চিহ্নিত করে।

    public class Student
    {
        public int StudentId { get; set; }
        [ForeignKey("Course")]
        public int CourseId { get; set; }
    }
    
  6. [Range]: একটি প্রপার্টির জন্য একটি নির্দিষ্ট রেঞ্জ নির্ধারণ করে।

    public class Student
    {
        public int StudentId { get; set; }
        [Range(18, 60)]
        public int Age { get; set; }
    }
    

Data Annotation এর সুবিধা

  • সহজ এবং কোডের মধ্যে সরাসরি কনফিগারেশন করতে পারে।
  • ডেটাবেস স্কিমা তৈরির জন্য কোড-এমবেডেড কনফিগারেশন প্রদান করে।
  • স্বল্পকোড সমাধান, যেখানে বেশি কনফিগারেশন প্রয়োজন হয় না।

Fluent API দিয়ে Model Configuration

Fluent API হল আরও ফ্লেক্সিবল এবং শক্তিশালী কনফিগারেশন পদ্ধতি, যা DbContext ক্লাসের OnModelCreating মেথডে ব্যবহৃত হয়। এটি ডেটাবেসের আচরণ এবং কাঠামো কনফিগার করার জন্য খুবই উপযোগী এবং Data Annotation এর তুলনায় আরও বেশি কনফিগারেশন কাস্টমাইজেশন প্রদান করে।

Fluent API এর উদাহরণ

  1. Primary Key Configuration: Fluent API এর মাধ্যমে একটি প্রপার্টি প্রাইমারি কী (Primary Key) হিসেবে কনফিগার করা যায়।

    modelBuilder.Entity<Student>()
        .HasKey(s => s.StudentId);
    
  2. Required Field Configuration: কোনো প্রপার্টি নাল (null) হতে পারবে না, এটি কনফিগার করতে Fluent API ব্যবহার করা হয়।

    modelBuilder.Entity<Student>()
        .Property(s => s.Name)
        .IsRequired();
    
  3. Max Length এবং Min Length Configuration: প্রপার্টির সর্বোচ্চ ও সর্বনিম্ন দৈর্ঘ্য কনফিগার করা।

    modelBuilder.Entity<Student>()
        .Property(s => s.Name)
        .HasMaxLength(100)
        .HasMinLength(3);
    
  4. Foreign Key Configuration: Fluent API ব্যবহার করে একটি ফোরেন কী (Foreign Key) সম্পর্ক কনফিগার করা।

    modelBuilder.Entity<Student>()
        .HasOne(s => s.Course)
        .WithMany(c => c.Students)
        .HasForeignKey(s => s.CourseId);
    
  5. Table and Column Naming: Fluent API ব্যবহার করে টেবিল ও কলামের নাম পরিবর্তন করা।

    modelBuilder.Entity<Student>()
        .ToTable("StudentsTable");
    
    modelBuilder.Entity<Student>()
        .Property(s => s.Name)
        .HasColumnName("Student_Name");
    
  6. Indexing: প্রপার্টির উপর ইনডেক্স তৈরি করতে Fluent API ব্যবহার করা হয়।

    modelBuilder.Entity<Student>()
        .HasIndex(s => s.Name)
        .IsUnique();
    

Fluent API এর সুবিধা

  • আরও বেশি কাস্টমাইজেশন এবং উন্নত কনফিগারেশন সুবিধা প্রদান করে।
  • টেবিলের সম্পর্ক, ডেটাবেস কনফিগারেশন, এবং প্রপার্টি বৈশিষ্ট্য গুলি অত্যন্ত বিস্তারিতভাবে কনফিগার করা যায়।
  • Data Annotation এর চেয়ে আরও শক্তিশালী এবং ফ্লেক্সিবল পদ্ধতি।

Fluent API বনাম Data Annotation: তুলনা

বৈশিষ্ট্যData AnnotationFluent API
কনফিগারেশন স্তরসরল এবং সোজা; মডেল ক্লাসে কনফিগারেশন করা হয়।শক্তিশালী এবং বিস্তারিত কনফিগারেশন সম্ভব।
কাস্টমাইজেশনসীমিত কাস্টমাইজেশন প্রদান করে।উন্নত কাস্টমাইজেশন এবং ফ্লেক্সিবল কনফিগারেশন।
উপযোগিতাছোট প্রজেক্ট বা সহজ কনফিগারেশন সমাধান।বৃহৎ প্রজেক্টে বা জটিল কনফিগারেশন প্রয়োজন হলে উপযোগী।
কোডের পরিমাণকম কোড, সরাসরি প্রপার্টিতে অ্যাট্রিবিউট ব্যবহার।কিছুটা বেশি কোড লিখতে হয়, তবে আরও শক্তিশালী কনফিগারেশন।

সারাংশ

Data Annotation এবং Fluent API দুটি শক্তিশালী পদ্ধতি Entity Framework মডেল কনফিগার করার জন্য। যেখানে Data Annotation দ্রুত এবং সরল কনফিগারেশন এর জন্য উপযোগী, সেখানে Fluent API অধিক কাস্টমাইজেশন এবং শক্তিশালী কনফিগারেশন প্রদান করে। Data Annotation সাধারণত ছোট প্রজেক্ট বা সহজ মডেল কনফিগারেশনের জন্য উপযুক্ত, আর Fluent API বড় প্রজেক্টে এবং জটিল ডেটাবেস কনফিগারেশনে বেশি কার্যকরী। Entity Framework-এ দুটি পদ্ধতিই একসঙ্গে ব্যবহার করা যেতে পারে, তবে প্রজেক্টের চাহিদা অনুযায়ী আপনি যে পদ্ধতিটি প্রয়োজন মনে করবেন, সেটি বেছে নিতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion