কীভাবে EF কোর সহ এএসপি.নেট কোর এ মাইগ্রেশন প্রয়োগ করতে হবে


179

আমি যখন PM> Remove-Migration -context BloggingContextEF কোর ব্যবহার করে ASP.NET কোর প্রকল্পের সাথে VS2015 এ চলেছি তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.    at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force) 
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0() 
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 
 The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.

আমি কীভাবে এটি প্রয়োগ করতে পারি? আমি এএসপি.নেট কোর 1.0, ইএফ কোর এবং ভিএস2015 আপডেট 3 এর সর্বশেষ রিলিজ ব্যবহার করছি।


3
-forceশেষে যোগ করার চেষ্টা করুন
প্রসপেক্টর


ধন্যবাদ
@ মিচেলফ্রেজিম

উত্তর:


215

ব্যবহার করুন:

CLI

> dotnet ef database update <previous-migration-name>

প্যাকেজ ম্যানেজার কনসোল

PM> Update-Database <previous-migration-name>

উদাহরণ:

PM> Update-Database MyInitialMigration

তারপরে সর্বশেষ স্থানান্তর সরানোর চেষ্টা করুন।

ডাটাবেস আপডেট ছাড়াই মাইগ্রেশন সরানো কার্যকর হয় না কারণ আপনি ডাটাবেসে পরিবর্তন প্রয়োগ করেছেন।

যদি পিএমসি ব্যবহার করে থাকে তবে চেষ্টা করুন: প্রধানমন্ত্রী> আপডেট-ডাটাবেস 0 এটি ডাটাবেসটি মুছবে এবং আপনাকে আপনার সমাধানে মাইগ্রেশন স্ন্যাপশট অপসারণ করতে দেবে


6
আমি এখনও একই ত্রুটি পাচ্ছি। আমি dotnet ef database update MyFirstMigration --context BloggingContextসফলভাবে কাজ করেছি যে প্রথম ব্যবহার । তারপর আমি দৌড়ে dotnet ef migrations remove --context BloggingContextআমার আমার পোস্ট হিসাবে দিয়েছিলেন একই ত্রুটি বার্তা
Nam

14
আপনাকে আগে মাইগ্রেশন আপডেট করতে হবে MyFirstMigration। যদি এটি 1 ম মাইগ্রেশন হয় (নামটি বোঝা যাচ্ছে) তবে আপনি dotnet ef database update 0ডাটাবেস থেকে সমস্ত মাইগ্রেশন রিভার্ট করতে (প্রয়োগ না করা) ব্যবহার করতে পারেন । এর পরে আপনি চালানোর করতে সক্ষম হওয়া উচিত dotnet ef migrations remove
বিভিপিবি

এছাড়াও এটিকে এর মূল্য লক্ষ করুন যে আপনি কেবলমাত্র মাইগ্রেশন নাম ব্যবহার করা উচিত, তারিখ-উপসর্গ ব্যতীত
Structed

2
এর dotnet ef migrations removeপরে কল করুন
চামিকা সানডামাল

আপনার দ্বিতীয় বিবৃতি: "তারপরে শেষ মাইগ্রেশন সরানোর চেষ্টা করুন" এই উত্তরে সম্পূর্ণ নয়, দয়া করে আপনার অর্থটি কী বোঝায় দয়া করে। মাইগ্রেশন ফাইল সরাবেন? একটি আদেশ কার্যকর? ...
এস.সার্পুশান

125

সমস্ত মাইগ্রেশন সম্পূর্ণরূপে অপসারণ এবং আবার শুরু করার জন্য, নিম্নলিখিতটি করুন:

dotnet ef database update 0
dotnet ef migrations remove

1
তবে আপনি সমস্ত স্থানান্তর সরাতে চান না। উদাহরণস্বরূপ, আপনি ডেটা mig মাইগ্রেশন ফোল্ডারের অধীনে পরিচয় (ব্যবহারকারী অ্যাকাউন্ট) এর জন্য ডিফল্ট মাইগ্রেশন ভিএস তৈরি করতে চান।
Nam

এটি জেনে রাখা ভাল dotnet ef database update 0তবে dotnet ef migrations removeপরে চালানো পরিচয়ের জন্য ডিফল্ট মাইগ্রেশন সরিয়ে ফেলবে যা সম্ভবত পছন্দসই নয়।
কিম্বাউডি

টিপ টিপানোর জন্য ধন্যবাদ dotnet ef database update 0! আমি এর উল্লেখ অন্য কোথাও দেখিনি ...
টোবিয়াস জে

3
@nam "তবে আপনি সমস্ত স্থানান্তর সরাতে চান না।" কিন্তু আমাদের মধ্যে কিছু। আমি যা চাই তা অনুমান করবেন না :)
স্টারম্যান্ডেলেক্স

3
এটি আমার পক্ষে কাজ করে না। প্রথম লাইনটি ঠিক ছিল এবং সমস্ত স্থানান্তর সরিয়ে ফেলুন, দ্বিতীয় লাইনে আমি এখনও পাইThe migration '20180618103514_InitialMigration' has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
ইডো রান রান

52

আপনি এখনও Update-Databaseকমান্ডটি ব্যবহার করতে পারেন ।

Update-Database -Migration <migration name> -Context <context name>

তবে, আপনার স্থানান্তরের নামটি বিচার করে আমি ধরে নিচ্ছি যে এটি প্রথম মাইগ্রেশন যাতে আদেশটি কাজ না করে। __MigrationHistoryআপনার ডাটাবেসে সারণী থেকে প্রবেশটি মুছতে সক্ষম হওয়া উচিত এবং তারপরে Remove-Migrationআবার কমান্ডটি চালানো উচিত । আপনি মাইগ্রেশন ফাইলও মুছতে পারেন এবং কেবল আবার শুরু করতে পারেন।


আপনি Update-Databaseপ্যাকেজ ম্যানেজমেন্ট কনসোল থেকে কল করতে পারেন বা dotnet ef database updateপ্রকল্প ডিরেক্টরি থেকে কমান্ড প্রম্পট থেকে কল করতে পারেন ।
কিম্বাওদি

6
ব্র্যাডের উত্তরটি এখানে কেবল স্পষ্ট করার জন্য - <migration name>যে মাইগ্রেশনটি আপনি ফিরে যেতে চান তার নামটি হওয়া উচিত (যেমন সম্ভবত আপনি যে সমস্যার সমাধান করেছেন তার আগে স্থানান্তর ), যে অভিবাসনটি আপনি পূর্বাবস্থাপন করতে চান তার নাম নয়।
মার্ক অ্যামেরি

52

নির্দিষ্ট মাইগ্রেশন (গুলি) প্রয়োগ করতে :

dotnet ef database update LastGoodMigrationName
or
PM> Update-Database -Migration LastGoodMigrationName

সমস্ত মাইগ্রেশন প্রয়োগ করতে :

dotnet ef database update 0
or
PM> Update-Database -Migration 0

শেষ স্থানান্তর সরানোর জন্য:

dotnet ef migrations remove
or
PM> Remove-Migration

সমস্ত স্থানান্তর অপসারণ করতে:

শুধু সরান Migrations ফোল্ডার ।

শেষ কয়েকটি স্থানান্তর সরানোর জন্য (সমস্ত নয়):

একগুচ্ছ মাইগ্রেশন সরানোর জন্য কোনও আদেশ নেই এবং আমরা কেবলমাত্র এই কয়েকটি migrationsএবং তাদের *.designer.csফাইলগুলি সরাতে পারি না কারণ আমাদের স্ন্যাপশট ফাইলটিকে ধারাবাহিক অবস্থায় রাখতে হবে। আমাদের একের পর এক স্থানান্তর অপসারণ করতে হবে ( To remove last migrationউপরে দেখুন)।

শেষ মাইগ্রেশনটি প্রয়োগ ও প্রয়োগ করতে:

dotnet ef migrations remove --force
or
PM> Remove-Migration -Force

আমি unapplyএই পোস্টে সমস্ত শব্দ দেখতে রাখা । এটি কেবল আমাকে আঘাত করেছে এটি কোনও প্রযুক্তিগত শব্দ নয়, এটি শব্দun - apply
হেলজগেট

28

সর্বশেষ প্রয়োগকৃত মাইগ্রেশনটি ফিরিয়ে আনতে আপনার উচিত (প্যাকেজ ম্যানেজার কনসোল আদেশগুলি):

  1. ডাটাবেস থেকে মাইগ্রেশন ফিরিয়ে দিন: PM> Update-Database <prior-migration-name>
  2. প্রকল্প থেকে মাইগ্রেশন ফাইল সরান (অথবা এটি পরবর্তী পদক্ষেপে আবার প্রয়োগ করা হবে)
  3. মডেল স্ন্যাপশট আপডেট করুন: PM> Remove-Migration

ইউপিডি : দ্বিতীয় ধাপটি ভিজ্যুয়াল স্টুডিও (2017) এর সর্বশেষ সংস্করণে প্রয়োজন হবে না বলে মনে হচ্ছে।


1
ধন্যবাদ! এটি পুরোপুরি মুগ্ধ হয়ে কাজ করেছিল যে সমস্ত সমাধানগুলির মধ্যে কেউ কখনও ২ য় পদক্ষেপের প্রয়োজনীয়তার কথা উল্লেখ করেনি
মাইকেল কার্গল

হ্যাঁ, এই পদক্ষেপের কথা কেউ উল্লেখ করেনি you আপনাকে ধন্যবাদ
আজাস আজু

দ্বিতীয় পদক্ষেপ সম্পর্কে নিশ্চিত নন, আমার ক্ষেত্রে (সর্বশেষ VS2017) মাইগ্রেশন ফাইলটি Remove-Migrationসমস্যা ছাড়াই কল করার পরে স্বয়ংক্রিয়ভাবে মোছা হবে । আপনি কী বলেছিলেন তা আমি নিশ্চিত নই "এটি পরবর্তী পদক্ষেপে আবার প্রয়োগ করা হবে"!
এসস্পার্পোশন

@ এস। সরপুশন আসলেই। আমি ম্যানুয়ালি এটিকে মুছে ফেলেছি কিন্তু যখন আমি সরান-স্থানান্তর চালিয়েছি তখন এটি আমার আগের মাইগ্রেশনটি ডাটাবেসে প্রয়োগ হওয়ার অভিযোগ করেছিল। কিন্তু এটি কাজ করে.
মেটালমাইকস্টার

দ্বিতীয় ধাপ আমার মনে হয় শুধুমাত্র প্রয়োজনীয় হলে আপনাকে কল dbContext.Database.Migrate()আপনার startup.cs মধ্যে
user3413723

23

সহজভাবে আপনি মান দ্বারা একটি অভিবাসন লক্ষ্য করতে পারেন

 Update-Database -Migration:0

তারপরে এগিয়ে যান এবং এটি সরান

 Remove-Migration

1
এটি আমার পক্ষে কাজ করেছে তবে আমি ভিএস2017 এর সাথে ইএফ এবং। নেট কোর 2.0 ব্যবহার করছি
জেমস মরিসন

2
সতর্কতা অবলম্বন করুন: -দেশান্তর: ০ এর অর্থ হ'ল মাইগ্রেশন ছাড়াই রাজ্যে ফিরে যান। এটি আপনার ডাটাবেস সাফ করবে
কাইরেন জনস্টোন

হ্যাঁ প্রশ্ন করা অনুসারে। আপনি যে মাইগ্রেশনটিতে ফিরে যেতে চান তার উপর নির্ভর করে আপনি মান
বাড়িয়ে দিতে

11

ইতিমধ্যে ডাটাবেসে প্রয়োগ করার পরে সর্বাধিক (সাম্প্রতিক?) মাইগ্রেশন "প্রয়োগযোগ্য" করতে:

  1. এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার খুলুন (দেখুন -> "এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার")
  2. পাশের দিকে ছোট ত্রিভুজগুলি প্রসারিত করে আপনার প্রকল্পের সাথে সংযুক্ত এমন ডাটাবেসটিতে নেভিগেট করুন।
  3. "টেবিলগুলি" প্রসারিত করুন
  4. "Dbo._EFMigrationHistory" নামে সারণীটি সন্ধান করুন।
  5. এটিতে ডান ক্লিক করুন এবং ভিজ্যুয়াল স্টুডিওতে সারণি এন্ট্রিগুলি দেখতে "ডেটা দেখুন" নির্বাচন করুন।
  6. আপনার মাইগ্রেশনের সাথে সম্পর্কিত সারিটি মুছুন যা আপনি আবেদন করতে চান (সতর্কতার সাথে "হ্যাঁ" বলুন, অনুরোধ করুন)।
  7. যে ডিরেক্টরিতে প্রকল্প.জসন ফাইল রয়েছে সেই কমান্ড উইন্ডোতে আবার "ডটনেট ইফ মাইগ্রেশন সরান" চালান Run বিকল্পভাবে, প্যাকেজ ম্যানেজার কনসোলে "সরান-স্থানান্তর" কমান্ডটি চালান।

আশা করি প্রকল্পের যে কোনও স্থানান্তরের ক্ষেত্রে এটি সহায়তা করে এবং প্রযোজ্য ... আমি এটি কেবলমাত্র সাম্প্রতিক মাইগ্রেশনে পরীক্ষা করেছি ...

শুভ কোডিং!


21
এটি মাইগ্রেশনকে বাস্তবে আন-প্রয়োগ করবে না, কেবল কাঠামোটিকে "চিন্তা" করুন এটি প্রয়োগ করা হয়নি। আপনি যদি এটি করেন তবে আপনার ডাটাবেসটি বেমানান অবস্থায় থাকবে।
চিহ্ন.মন্তেরো

আপনার __EFMigrationsHistory এ ম্যানুয়ালি ডেটা সম্পাদনা করা ভয়ানক পরামর্শ। এটা করবেন না। এই টেবিলটি হ'ল মাইগ্রেশন সরঞ্জামগুলি দ্বারা কেবলমাত্র হুডের নীচে ব্যবহার করা। আপনি যদি ম্যানুয়ালি ডেটা সম্পাদনা শুরু করেন তবে একটি একক ভুল আপনার প্রকল্পে সমস্ত ধরণের উন্মাদ অপ্রত্যাশিত আচরণ তৈরি করতে পারে। অন্যান্য প্রস্তাবিত সমাধানগুলির মধ্যে একটি ব্যবহার করা আরও অনেক ভাল ধারণা।
জো ইরবি

আমাদের এমন পরিস্থিতি হয়েছিল যেখানে কোনও জুনিয়র দলের সদস্য শাখা বদলানোর সাথে বিভ্রান্ত হয়ে পড়েছিলেন এবং উভয় থেকেই ম্যানগ্রেশনটিকে ম্যানুয়ালি মুছে ফেলার কাজটি শেষ করেছেন (যদিও এটি ইতিমধ্যে __EFMigrationHistory টেবিলে আগে থেকেই প্রয়োগ ছিল), তাই আমরা "ডাউন" হারাতে পেরেছি। এটিই আমরা শেষ করতে পেরেছি, সাথে সাথে এসএসএমএসে কিছু ম্যানুয়াল বিপরীত। সুতরাং এটি করবেন না - যদি না এই মুহুর্তে আপনার অন্য কোনও পছন্দ না থাকে। কমপক্ষে তিনি যা করেছিলেন তা হ'ল একটি নতুন ক্ষেত্র যুক্ত করা।
এলা

10

দরকারী লিঙ্কটি, প্রশ্নের একটি মন্তব্য হওয়া উচিত
মাইকেল ফ্রেইজিম

আপনি নেট নেট
জ্যাক

10

'_EFMigrationHistory' সারণী থেকে আপনার স্থানান্তর '20160703192724_MyFirstMigration' রেকর্ড মুছে ফেলা উচিত ।

অন্যথায় এই আদেশটি মাইগ্রেশন সরিয়ে ফেলবে এবং মাইগ্রেশন ফোল্ডারটি মুছে ফেলবে:

   > remove-migration -force

7

সাধারণভাবে আপনি যদি প্যাকেজ ম্যানেজার কনসোল ব্যবহার করে থাকেন তবে নির্দিষ্ট স্থানান্তরকে সরিয়ে দেওয়ার সঠিক উপায় হ'ল মাইগ্রেশনের নাম উল্লেখ করে by

Update-Database -Migration {Name of Migration} -Context {context}

ডক্স অনুসারে আপনি যে সর্বশেষ স্থানান্তরটি প্রয়োগ করেছেন তা অপসারণের আরেকটি উপায় হ'ল কমান্ডটি ব্যবহার করে:

dotnet ef migrations remove

এই কমান্ডটি আপনার সমাধান ডিরেক্টরিতে ডেভেলপার কমান্ড প্রম্পট ( কীভাবে কমান্ড প্রম্পট খুলবেন ) থেকে কার্যকর করা উচিত ।

উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটির নাম "অ্যাপ্লিকেশন" এর ভিতরে থাকে এবং ফোল্ডার সি: jects প্রকল্পে থাকে। তারপরে আপনার পথটি হওয়া উচিত:

C:\Projects\Application

1
"ডটনেট ইফ মাইগ্রেশন" যদি একটি ত্রুটি ফিরিয়ে দেয় তবে "
করণীয়টি

2

EF কোর 1.0 এ মাইগ্রেশন প্রয়োগের জন্য কমান্ডটি ব্যবহার করুন:

ডটনেট ইফ ডাটাবেস আপডেট {মাইগ্রেশন_নাম}

আপনি নিজের পরিবর্তনগুলি সংরক্ষণ করতে চান না হওয়া অবধি মাইগ্রেশনের স্থানান্তর নামটি ব্যবহার করুন। মাইগ্রেশনগুলির নামের তালিকাটি ব্যবহার করে পাওয়া যাবে:

ডটনেট ইফ মাইগ্রেশন তালিকা


2

ডিবিতে প্রয়োগ করা সমস্ত স্থানান্তর ফিরিয়ে আনতে কেবল চালান:

update-database 0

Remove-Migrationমাইগ্রেশন ডিরেক্টরিতে মাইগ্রেশন ফাইলগুলি প্রদর্শিত হওয়ার সাথে সাথে এটি চালানো উচিত with কমান্ডটি সর্বশেষতম স্থানান্তর মুছে ফেলা এবং স্ন্যাপশট আপডেট করে।



0
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

await context.Database.EnsureDeletedAsync();

-1

1. সারণি "dbo._EFMigrationsHistory" সন্ধান করুন, তারপরে আপনি যে মাইগ্রেশন রেকর্ডটি সরাতে চান সেটি মুছুন। ২. প্রধানমন্ত্রী (প্যাকেজ ম্যানেজার কনসোল) "অপসারণ-স্থানান্তর" চালান। আমার জন্য কাজ কর.


এটি ডাটাবেসের একটি অসামঞ্জস্যপূর্ণ অবস্থার দিকে পরিচালিত করবে (উদাহরণস্বরূপ একটি কলামটি ইতিমধ্যে বাদ দেওয়া হয়েছে)
UNeverNo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.