সত্তা-ফ্রেমওয়ার্ক মাইগ্রেশন রিসেট করুন


299

আমি আমার মাইগ্রেশনগুলিকে প্রশ্রয় দিয়েছি, আমি IgnoreChangesপ্রাথমিক মাইগ্রেশনটি ব্যবহার করেছি , তবে এখন আমি আমার সমস্ত স্থানান্তর মুছে ফেলতে এবং যুক্তি দিয়ে সমস্ত দিয়ে প্রাথমিক অভিবাসন দিয়ে শুরু করতে চাই।

আমি যখন ফোল্ডারে মাইগ্রেশন মুছে ফেলি এবং চেষ্টা করি এবং Add-Migrationএটি একটি সম্পূর্ণ ফাইল তৈরি করে না (এটি খালি - কারণ আমি আমার শেষের পরে কোনও পরিবর্তন করি নি, তবে এখন মুছে ফেলা হয়েছে, স্থানান্তর)।

কোনও অক্ষম-স্থানান্তর কমান্ড আছে, তাই আমি আবার যুক্ত করতে পারি Enable-Migrations?


1
সম্পর্কিত: stackoverflow.com/questions/9703810/...
sshow

3
আপনার যদি একাধিক সংযোগের ব্যবস্থা থাকে তবে একটি গুরুত্বপূর্ণ নোট: আপনি যখন মাইগ্রেশনটি পুনরায় সেট করবেন তখন কোনটি ব্যবহার করবেন তা নির্দিষ্ট করুন, অন্যথায় এটি উভয় ক্ষেত্রেই প্রয়োগ করার চেষ্টা করবে যা বৈষম্য হওয়ার কারণে সমস্যার কারণ হতে পারে।
জেরোইন ভেনেভেল

দ্রষ্টব্য: আপনি যদি নিজের স্থানান্তরগুলি মুছে না ফেলেন (আপনি সংস্করণ নিয়ন্ত্রণটি সঠিকভাবে ব্যবহার করেন?), আপনি প্রথমে মাইগ্রেশন করার পরে আপনার ডিবি আপডেট করতে পারেন তবে প্রশমনটি মুছে ফেলে এবং সেদিক থেকে নতুন মাইগ্রেশন তৈরি করেছেন। : এখানে দেখুন stackoverflow.com/a/23793384/309634
DarcyThomas

উত্তর:


446

তোমার দরকার :

  1. রাষ্ট্রটি মুছুন: আপনার প্রকল্পের মাইগ্রেশন ফোল্ডারটি মুছুন; এবং
  2. __MigrationHistoryআপনার ডাটাবেসে টেবিলটি মুছুন (সিস্টেম সারণীর অধীনে থাকতে পারে); তারপর
  3. প্যাকেজ ম্যানেজার কনসোলে নিম্নলিখিত কমান্ডটি চালান:

    Enable-Migrations -EnableAutomaticMigrations -Force

    সাথে বা ছাড়া ব্যবহার করুন -EnableAutomaticMigrations

  4. এবং অবশেষে, আপনি চালাতে পারেন:

    Add-Migration Initial

5
^^ এটি নির্ধারণ করা - এটি একটি টিএফএস ত্রুটি ছিল - আপনি যদি টিএফএস ব্যবহার করেন তবে "সক্ষম-অভিবাসনগুলি সক্ষম করুন ..." কমান্ড চালানোর আগে আপনাকে একটি চেক-ইন করতে হবে। : ডি
ব্রেনস্লাগস 83

7
আপনি যদি সংস্করণ নিয়ন্ত্রণ ব্যবহার করছেন না, আপনি মুছে ফেলার আগে আপনার বীজ মান সংরক্ষণ করুন!
RyanJMcGowan

77
@ রায়ানজেএমসি গোয়ান আপনি যদি সংস্করণ নিয়ন্ত্রণ ব্যবহার না করেন তবে আপনি আপনার কাজ হারাতে পারেন। :-)
মাইক কল

4
@Tood। এটি +1। আমাকে অনেক সময় বাঁচিয়েছে। এখন যদি কেবল ইএফ দল সেগুলি একটি রিসেট-মাইগ্রেশন কমান্ডের সাথে অন্তর্ভুক্ত করতে পারে। হতে পারে EF 6 ...
জেরাল্ড ডেভিস

24
বিদ্যমান ডাটাবেসের জন্য আপনার "আপ" ফাংশনের বিষয়বস্তু মন্তব্য করতে হবে। অন্যথায় আপনি "আপডেট-ডেটাবেস" চালানোর সময় একটি ত্রুটি পাবেন, এটি অভিযোগ করবে যে টেবিলটি ইতিমধ্যে রয়েছে
গাই

149

ইস্যু: আপনি আপনার স্থানান্তরকে জটিল করেছেন এবং আপনার বিদ্যমান সারণীগুলি মোছা না করে আপনি এটি পুনরায় সেট করতে চান।

সমস্যা: আপনি ডাটাবেসে বিদ্যমান সারণীগুলির সাথে মাইগ্রেশন পুনরায় সেট করতে পারবেন না কারণ EF স্ক্র্যাচ থেকে টেবিলগুলি তৈরি করতে চায়।

কি করো:

  1. MigrationHistory টেবিল থেকে বিদ্যমান স্থানান্তর মুছুন।

  2. মাইগ্রেশন ফোল্ডার থেকে বিদ্যমান স্থানান্তরগুলি মুছুন।

  3. অ্যাড-মাইগ্রেশন রিসেট চালান। এটি আপনার মাইগ্রেশন ফোল্ডারে মাইগ্রেশন তৈরি করবে যার মধ্যে সারণীগুলি তৈরি করা অন্তর্ভুক্ত রয়েছে (তবে এটি এটি চালায় না যাতে এটি ত্রুটি থেকে যায় না))

  4. আপনাকে এখন মাইগ্রেশনহিসটরি টেবিলের প্রাথমিক সারি তৈরি করতে হবে যাতে EF- এর বর্তমান অবস্থার স্ন্যাপশট থাকে। আপনি মাইগ্রেশন প্রয়োগ করলে EF এটি করবে। তবে, সারণি ইতিমধ্যে আপনার ডাটাবেসে উপস্থিত থাকা হিসাবে আপনি সবেমাত্র স্থানান্তরিত করতে পারবেন না। সুতরাং অভিবাসনে যান এবং "আপ" পদ্ধতির অভ্যন্তরে সমস্ত কোড মন্তব্য করুন।

  5. এখন আপডেট-ডাটাবেস চালান। এটি মাইগ্রেশন প্রয়োগ করবে (বাস্তবে ডাটাবেস পরিবর্তন না করার সময়) এবং মাইগ্রেশনহিসটরিতে একটি স্ন্যাপশট সারি তৈরি করবে।

আপনি এখন আপনার স্থানান্তরগুলি পুনরায় সেট করেছেন এবং সাধারণ স্থানান্তর সহ চালিয়ে যেতে পারেন।


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

2
এটি আরও নমনীয় উত্তরও। আমার ক্ষেত্রে কিছু পরিবর্তন হয়েছে যা আমার প্রয়োগ প্রয়োজন এবং কিছু অন্যান্য প্রয়োগ করেন নি। আমি কেবল দরকারী আপগুলিকে আমার আপ () এ রাখতে পারি।
tec-goblin

1
@ এইচ। জনসন, আমি এটি দেখেছি। আপনি এটি সম্পর্কে একটি প্রশ্ন আছে?
গ্রেগ গাম

2
একটি বিষয় সচেতন হতে হবে, EF 6.0 থেকে _MigrationHistory টেবিলটিতে একাধিক DBContexts এর স্থানান্তর রয়েছে। এটি মুছে ফেলা সমস্যার কারণ হতে পারে, আপনার কেবল কনটেক্সটিকে = আপনার স্থানান্তর নাম যেখানে সারিগুলি মুছতে হবে। উপরের ২ টির পরেও আমাকে আবার মাইগ্রেশন সক্ষম করতে হয়েছিল
ডেভিড ওয়াটারওয়ার্থ

2
মূলত একই উত্তর, প্রসারিত উদাহরণ সহ (স্ক্রিনশট সহ): ওয়েবলগ.ওয়েস্ট
উইন্ড.

30

কেমন

Update-Database TargetMigration: $InitialDatabase

প্যাকেজ ম্যানেজার কনসোলে? এটি সমস্ত আপডেটগুলি খুব প্রাথমিক অবস্থায় পুনরায় সেট করা উচিত।

রেফারেন্স লিংক: কোড প্রথম স্থানান্তর - একটি নির্দিষ্ট সংস্করণে স্থানান্তরিত (ডাউনগ্রেড সহ)


আমি মনে করি যে আমার মূল হতাশা আর স্থিতির উপর সঠিকভাবে রাষ্ট্র বজায় রাখতে বিশ্বাস করে না। এবং ফলাফল হিসাবে স্ক্র্যাচ থেকে শুরু করতে চান।
টড

@ টড, আমি হোঁচট খেয়েছি এবং সর্বদা শুরু করার জন্য মাইগ্রেশন ফাইলগুলি মুছতে হবে কিনা তা সর্বদা পরিষ্কার ছিল না। এখন এটি নিম্নোক্তভাবে কাজ করছে: "" আপডেট-ডেটাবেস – টার্গেটমাইগ্রেশন: $ ইনিশিয়াল ডেটাবেস "কমান্ডটি ব্যবহার করে প্রাথমিকটিতে ফিরে যেতে হবে। ২. সমস্ত মাইগ্রেশন ফাইল (yyyyMMddHHmmssx_Name.cs বা .vb ব্যবহার করে নামকরণ) সরান 3.. 'অ্যাড-মাইগ্রেশন-নাম কিছু_নাম' ব্যবহার করে আপডেটটি রিফ্রেশ করুন। ৪. 'আপডেট-ডেটাবেস' ব্যবহার করে আপনার ডাটাবেসকে প্রভাবিত করতে আপডেট দিন। আশা করি এটা তোমার জন্য কাজ করবে।
ক্রিস ভুন

আমার ক্ষেত্রে, এই উত্তরের প্রস্তাবিত কমান্ডের ফলে এসকিউএল ত্রুটি হয়েছিল।
জাস্টিন স্কাইলস

"ইনিশিয়াল ডেটাবেস" এর অর্থ কী? এটি ডিবিতে ইতিমধ্যে তৈরি করা সারণী বা কলামগুলি মুছবে?
সার্জ 17

16

এটি ঠিক করতে, আপনার প্রয়োজন:

  1. মাইগ্রেশন ফোল্ডারে সমস্ত * .cs ফাইল মুছুন।

  2. ডাটাবেজে _ অভিবাসন ইতিহাস সারণী মুছুন Delete

  3. চালান Enable-Migrations -EnableAutomaticMigrations -Force

  4. চালান Add-Migration Reset

তারপরে, public partial class Reset : DbMigrationক্লাসে, আপনাকে বিদ্যমান এবং বর্তমানের সমস্ত সারণী মন্তব্য করতে হবে:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

আপনি যদি এই বিটটি মিস করেন তবে সমস্ত ব্যর্থ হবে এবং আপনাকে আবার শুরু করতে হবে!

  1. এখন চালান Update-Database -verbose

আপনি যদি উপরেরটি সঠিকভাবে করে থাকেন তবে এটি সফল হওয়া উচিত এবং এখন আপনি সাধারণ হিসাবে চালিয়ে যেতে পারেন।


2
সমস্ত কিছু মন্তব্য করার পরিবর্তে আপনি কেবল "রিটার্ন" লিখতে পারেন; পদ্ধতির প্রথম লাইনে আপ ()।
চেইনস্টায়ার

6

আমরা নেট নেটওয়ার্কে ইএফ অনুসন্ধান করার পরে এটি এখনও বিবেচনা করা হবে, আমি আমার উত্তর এখানে পোস্ট করব (যেহেতু এটি আমাকে অনেকটা হান্ট করেছে)। নোট করুন যে EF 6 .NET সংস্করণটির সাথে কিছু সূক্ষ্মতা রয়েছে (কোনও প্রাথমিক আদেশ নেই, এবং আপনাকে "স্ন্যাপশট" ফাইলগুলি মুছতে হবে)

(। নেট কোর ২.১ এ পরীক্ষিত)

পদক্ষেপগুলি এখানে:

  1. _efmigrationhistoryটেবিলটি মুছুন ।
  2. তাদের নামে স্ন্যাপশট রয়েছে এমন ফাইলগুলির জন্য আপনার সম্পূর্ণ সমাধানটি অনুসন্ধান করুন ApplicationDbContextSnapshot.csএবং সেগুলি মুছুন
  3. আপনার সমাধান পুনর্নির্মাণ
  4. চালান Add-Migration InitialMigration

দয়া করে নোট করুন: আপনার অবশ্যই সমস্ত স্ন্যাপশট ফাইল মুছতে হবে । আমি অজস্র ঘন্টা ব্যয় করেছি কেবল ডাটাবেস মুছতে ... আপনি যদি এটি না করেন তবে এটি খালি মাইগ্রেশন উত্পন্ন করবে।

এছাড়াও, # 3 এ আপনি নিজের অভিবাসনের নাম ঠিক করতে পারেন তবে আপনি চান।

এখানে কিছু অতিরিক্ত সংস্থান রয়েছে: এসপ নেট কোর মাইগ্রেশন খালি উত্পন্ন হয়েছে

সত্তা ফ্রেমওয়ার্ক mig টি স্থানান্তর পুনরায় সেট করুন


3

সত্ত্বা ফ্রেমওয়ার্ক 6 এ দয়া করে চেষ্টা করুন:

Add-Migration Initial

প্রাথমিক মাইগ্রেশন ফাইল আপডেট করার জন্য।


3

সত্তা ফ্রেমওয়ার্ক কোর ইন।

  1. মাইগ্রেশন ফোল্ডার থেকে সমস্ত ফাইল সরান।
  2. কনসোলে টাইপ করুন

ডটনেট ইফ ডাটাবেস ড্রপ -f -v

ডটনেট ইফ মাইগ্রেশনগুলি প্রাথমিক যোগ করে

ডটনেট ইএফ ডাটাবেস আপডেট


2

আমার সমস্যাটি প্রমাণিত হয়েছিল যে আমি মাইগ্রেশন ফোল্ডারটি ম্যানুয়ালি মুছে ফেলেছি। আমি এটি করেছি কারণ আমি সামগ্রীগুলি ব্যাক আপ করতে চেয়েছিলাম, তাই আমি কেবল ফোল্ডারটিকে প্রকল্পের বাইরে টেনে আনলাম। আমি পরে সমস্যাটি ঠিক করে রেখেছিলাম (ব্যাকআপ কপি তৈরি করার পরে), তারপরে মাইগ্রেশন ফোল্ডারটি সলিউশন এক্সপ্লোরারে ডান ক্লিক করে এবং পপআপ মেনু থেকে মুছুন পছন্দ করে।


1

EF6 এ

  1. আপনার সমস্ত ফাইল 'মাইগ্রেশন' ফোল্ডারে মুছুন ... তবে 'প্রাথমিক তৈরি' বা 'কনফিগারেশন' নয়।
  2. ডাটাবেস মুছুন।
  3. এখন চালান Add-Migration Initial
  4. এখন আপনি 'আপডেট-ডাটাবেস' করতে পারেন এবং সবকিছু ঠিকঠাক হবে।

1

মুছুনMigrations ফোল্ডার, Cleanতারপর Rebuildপ্রকল্পের। এটি আমার পক্ষে কাজ করেছে। ক্লিন এবং পুনর্নির্মাণের আগে এটি বলছিল যে মাইগ্রেশন এর ক্যাশেড স্মৃতিতে ইতিমধ্যে উপস্থিত রয়েছে, এটি এখনও মুছে ফেলা হয়নি।


0

এই পদ্ধতিতে __MigrationHistoryটেবিল মোছার প্রয়োজন হয় না , তাই আপনাকে স্থাপনের সময় ডাটাবেসে হাত রাখতে হবে না।

  1. মাইগ্রেশন ফোল্ডার থেকে বিদ্যমান স্থানান্তরগুলি মুছুন।
  2. প্যাকেজ ম্যানেজার কনসোল চালাতে Add-Migration ResetMigrations
  3. Up()পদ্ধতিতে মাইগ্রেশন ইতিহাস পরিষ্কার করুন :
/// <summary>
/// Reset existing migrations by cleaning the __MigrationHistory table
/// and creating a new initial migration with the current model snapshot.
/// </summary>
public partial class ResetMigrations : DbMigration
{
    public override void Up()
    {
        Sql("DELETE FROM [dbo].[__MigrationHistory]");
    }

    public override void Down()
    {
    }
}

0

নেট কোর 3.0 এ:

আমি মাইগ্রেশন রিসেট করার কোনও উপায় খুঁজে পাচ্ছিলাম না ।

আমি ভাঙ্গা স্থানান্তর নিয়েও সমস্যায় পড়েছি এবং এখানে প্রদত্ত উত্তরগুলি আমার পক্ষে কার্যকর হয়নি। আমার কাছে নেট নেট 3.0 ওয়েব এপিআই রয়েছে এবং গত মাসে কোথাও আমি সরাসরি ডাটাবেস সম্পাদনা করেছি। হ্যাঁ, আমি একটি খারাপ, খারাপ কাজ করেছি।

এখানে প্রস্তাবিত কৌশলগুলির ফলে প্যাকেজ ম্যানেজার কনসোলে বেশ কয়েকটি ত্রুটি হয়েছিল:

  • এই নামের একটি স্থানান্তর ইতিমধ্যে বিদ্যমান
  • স্ন্যাপশটটি খুঁজে পাওয়া যায়নি
  • 'ফোর্স' কোনও স্বীকৃত প্যারামিটার নয়

মঞ্জুর, আমি হয়তো একটি পদক্ষেপ মিস করেছি বা সঠিক ফাইলগুলি সাফ করতে মিস করেছি, তবে আমি দেখতে পেয়েছি যে এতোটা নিষ্ঠুর শক্তি ছাড়াই এটি পরিষ্কার করার উপায় রয়েছে:

  • পিএমসি থেকে নাম অনুসারে প্রতিটি স্থানান্তরের জন্য সরানো-স্থানান্তর, বিপরীত ক্রম অনুসারে, ভাঙ্গা স্থানান্তরিত হওয়া সহ
  • নতুন মাইগ্রেশন তৈরি করতে অ্যাড-মাইগ্রেশন যা বর্তমান স্কিমা অবধি শেষ ভাল স্থানান্তরর মধ্যে ব-দ্বীপ হবে

এখন যখন ওয়েব APIটি খালি ডেটাবেস দিয়ে শুরু করা হয়, সত্তা মডেলগুলির সাথে মেলে এটি সারণী এবং বৈশিষ্ট্যগুলি সঠিকভাবে তৈরি করে।

আছে HTH!



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.