C# (.NET) में डेटाबेस माइग्रेशन: पूर्ण गाइड
C# (.NET) में किसी भी एप्लिकेशन को विकसित करते समय डेटाबेस स्कीमा में बदलावों का प्रबंधन एक महत्वपूर्ण कार्य है। माइग्रेशन आपको डेटाबेस संरचना में बदलावों (टेबल, कॉलम, इंडेक्स जोड़ना) को वर्जन करने, ट्रैक करने और स्वचालित रूप से लागू करने की अनुमति देते हैं, जो एप्लिकेशन कोड के साथ सिंक्रोनस रूप से होते हैं। .NET इकोसिस्टम में इस कार्य के लिए कई परिपक्व टूल्स मौजूद हैं। इस लेख में हम तीन मुख्य दृष्टिकोणों पर विस्तार से चर्चा करेंगे: Entity Framework Core का अंतर्निहित तंत्र, विशेष लाइब्रेरी FluentMigrator और DbUp।
1. Entity Framework Core Migrations (EF Core)
यह उन प्रोजेक्ट्स के लिए सबसे लोकप्रिय तरीका है जो पहले से ORM Entity Framework Core का उपयोग कर रहे हैं। माइग्रेशन आपके डेटा मॉडल (Code-First दृष्टिकोण) के साथ गहराई से एकीकृत होते हैं।
स्थापना और कॉन्फ़िगरेशन
माइग्रेशन के साथ काम करने के लिए आपको पैकेज स्थापित करना होगा:
dotnet add package Microsoft.EntityFrameworkCore.Toolsमाइग्रेशन बनाना और लागू करना
अपने C# मॉडल में बदलाव करने के बाद (उदाहरण के लिए, User क्लास में एक नई प्रॉपर्टी Email जोड़ना), टर्मिनल में निम्नलिखित चलाएँ:
dotnet ef migrations add AddEmailToUserdotnet ef database updateपहला कमांड स्वचालित रूप से जनरेटेड C# कोड के साथ एक माइग्रेशन फ़ाइल बनाएगा। दूसरा इसे आपके डेटाबेस पर लागू करेगा।
माइग्रेशन कोड का उदाहरण (जनरेटेड फ़ाइल):
public partial class AddEmailToUser : Migration{ protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn<string>( name: "Email", table: "Users", type: "nvarchar(200)", nullable: true); }
protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Email", table: "Users"); }}मेथड Up बदलाव लागू करता है, Down उन्हें वापस रोलबैक करता है।
EF Core Migrations के लाभ और हानियाँ
- लाभ: मॉडल के साथ गहरा एकीकरण, स्वचालित कोड जनरेशन, रोलबैक का समर्थन, .NET इकोसिस्टम में अंतर्निहित।
- हानियाँ: EF Core पर निर्भरता, गैर-सामान्य बदलावों (जैसे कॉलम का नाम बदलना) में जटिलता, टीम में संघर्ष की संभावना।
2. FluentMigrator
यह एक स्वतंत्र, हल्की-फुल्की माइग्रेशन लाइब्रेरी है जो किसी विशिष्ट ORM से बंधी नहीं है। माइग्रेशन fluent-इंटरफ़ेस का उपयोग करके मैन्युअल रूप से C# में लिखे जाते हैं।
स्थापना
dotnet add package FluentMigratorमाइग्रेशन का उदाहरण
[Migration(202310010001)]public class CreateUserTable : Migration{ public override void Up() { Create.Table("Users") .WithColumn("Id").AsInt32().PrimaryKey().Identity() .WithColumn("Name").AsString(100).NotNullable() .WithColumn("Email").AsString(200).Nullable(); Create.Index("IX_Users_Email") .OnTable("Users") .OnColumn("Email"); }
public override void Down() { Delete.Table("Users"); }}माइग्रेशन चलाना
माइग्रेशन निष्पादित करने के लिए runner का उपयोग किया जाता है। Program.cs में कॉन्फ़िगरेशन का उदाहरण:
var serviceProvider = new ServiceCollection() .AddFluentMigratorCore() .ConfigureRunner(rb => rb .AddSqlServer() .WithGlobalConnectionString("YourConnectionString") .ScanIn(typeof(CreateUserTable).Assembly).For.Migrations()) .BuildServiceProvider();
using var scope = serviceProvider.CreateScope();var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();runner.MigrateUp();