বিদ্যমান ইএফ কোড প্রথম ডাটাবেসটি স্ক্র্যাচ থেকে কীভাবে মুছুন এবং পুনরায় তৈরি করবেন


84

আমি ভিএস ২০১২ সালে ইএফ 5 এর সাথে ইএফ কোড প্রথমটি ব্যবহার করছি I আমি প্রধানমন্ত্রী update-databaseকমান্ডটি ব্যবহার করি এবং নমুনা ডেটা সহ কিছু সারণী পূরণ করার জন্য আমার একটি সহজ বীজ পদ্ধতি রয়েছে।

আমি আমার x.mdb মুছতে এবং পুনরায় তৈরি করতে চাই। আপডেটের ইতিহাসটি সিঙ্কের বাইরে চলে গেছে বলে মনে হচ্ছে। আমি যদি আমার প্রসঙ্গে আমার সমস্ত ডিবিএসেটকে মন্তব্য করি update-databaseতবে কোনও ত্রুটি ছাড়াই চলে তবে ডিবিতে কিছু টেবিল রেখে যায়। আমার কাছে ডিবিতে কোনও মূল্যবান ডেটা নেই বলে সমস্ত জিনিসটি পুনরায় সেট করা সহজতম বলে মনে হয়।

আমি কীভাবে এটি সম্পাদন করতে পারি?

উত্তর:


112

যদি আমি এটা ঠিক বুঝতে পারি ...

আপনি যদি চান start clean:

1) ম্যানুয়ালি আপনার ডিবি মুছে ফেলুন - এটি যেখানেই রয়েছে (আমি ধরে নিচ্ছি যে আপনার সংযোগটি সাজানো হয়েছে), বা এটি খালি করুন, তবে সহজ / নিরাপদ হ'ল এটি একসাথে system __MigrationHistoryমুছে ফেলা - টেবিল রয়েছে - আপনারও এটি সরানো দরকার।

২) সমস্তmigration files - যা নীচে রয়েছে Migrations- এবং নামগুলির মতো নাম ইত্যাদি সরান - সেগুলি সরিয়ে দিন,

3) মাইগ্রেশন (এবং বাকী ) সমেত আপনার প্রকল্পটি পুনর্নির্মাণ করুন - এবং নিশ্চিত করুন যে আপনার প্রকল্পটি স্বয়ংক্রিয়ভাবে তৈরির জন্য (কনফিগারেশন) সেট আপ হয়েছে (যা কখনও কখনও সমস্যার কারণ হতে পারে - তবে সম্ভবত আপনার পক্ষে নয়),

4) Add-Migration Initialআবার দৌড় - তারপরUpdate-Database


6
সুতরাং ডাটাবেসটি মুছে ফেলার জন্য ef মাইগ্রেশন পাওয়ার কোনও আদেশ নেই?
cjb110

4
... যতদূর আমি জানি (সর্বশেষ সংস্করণ সম্পর্কে নিশ্চিত নয়) - ইবি / মাইগ্রেশনগুলি ডিবি না থাকায় 'তৈরি করা' ভাল এবং কোড পরিবর্তন করার সাথে সাথে 'আপডেট করা' ভাল। তবে যখন আপনাকে কিছু প্রশাসনিক রক্ষণাবেক্ষণ করতে হবে তখন আপনাকে হাত নষ্ট করতে হবে
এনএসগাগা-বেশিরভাগ-নিষ্ক্রিয়

4
এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার থেকে আমাকে ডাটাবেসও সরিয়ে ফেলতে হয়েছিল।
স্টিভেন জিউরিস

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

4
@lpacheco আপনার যদি ডেটাযুক্ত কোনও প্রোডাক্ট ডাটাবেস থাকে যা আপনি ধ্বংস করতে চান না, আহ, আমি শ্রদ্ধার সাথে পরামর্শ দিচ্ছি যে "কীভাবে মুছবেন ... একটি বিদ্যমান ... ডাটাবেস" শিরোনামের একটি প্রশ্ন আপনার পক্ষে একেবারে সঠিক প্রশ্ন ছিল না ।
মার্ক অ্যামেরি

60

আপনি যদি কমান্ডটি ব্যবহার করে আপনার মাইগ্রেশন তৈরির সঠিক উপায়ে কাজ করেন Add-Migration "Name_Of_Migration" তবে আপনি একটি পরিষ্কার শুরু করতে ( অবশ্যই ডেটা হ্রাস সহ পুনরায় সেট করুন ) অবশ্যই করতে পারেন :

  1. Update-database -TargetMigration:0

    ডাউন পদ্ধতিগুলি সম্পাদন করার পরে সাধারণত আপনার ডিবি খালি রয়েছে।

  2. Update-database

    এটি আপনার বর্তমান স্থানান্তরে আপনার ডিবি পুনরায় তৈরি করবে


4
আপডেট-ডাটাবেস-টার্গেটমাইগ্রেশন: 0 মুছে ফেলার জন্য 0 -f (ফোর্স) পতাকা লাগানো উচিত অন্যথায় এটি সম্ভাব্য ডেটা ক্ষতি বলে। কমান্ডটি হওয়া উচিত: আপডেট-ডাটাবেস-টার্গেটমাইগ্রেশন: 0 -f
টাস্কলেটর

@ তাসকালেটর, আমি কেবল -f ছাড়া এটি চেষ্টা করেছি এবং সম্ভাব্য ডেটা হ্রাস সম্পর্কে কোনও সতর্কতা ছিল না। EF 6.1.2 ব্যবহার করে, এবং সারণীগুলিতে থাকা ডেটা ছিল।
jk7

নিখুঁত উত্তর. দ্রুত এবং সহজ! Thnx
স্যাটেলব্যাপগুলি

ইএফ কোর ডক্স অনুসারে, সঠিক প্যারামিটারটির নাম হ'ল টার্গেট (ইএফ কোর ১.১ এর জন্য) বা-অভিবাসন (ইএফ কোর ২.০ এর জন্য)
হার্ভে দারভে

32

প্যাকেজ ম্যানেজার কনসোল থেকে ড্রপ, তৈরি এবং বীজের একক লাইনার:

update-database -TargetMigration:0 | update-database -force

কাবুম।


4
কেন একই পদক্ষেপটি দুইবার কার্যকর করা দরকার? "আপডেট-ডাটাবেস-ফোর্স" মানে
সুইসকোডার

কেবল একটি ছোট্ট বিজ্ঞপ্তি: "অটোমেটিক মাইগ্রেশনডাটা লসএলয়েড = সত্য;" কনফিগারেশন মধ্যে প্রয়োজন।
ইউনিকো

4
EF কোর মধ্যে সমতুল্য বাক্য গঠন ঠিক Update-Database 0। নির্বিশেষে, এটি ওপি-র ক্ষেত্রে খুব উপযুক্ত নয় যেখানে "আপডেটের ইতিহাসটি সমন্বয়ের বাইরে চলেছে " ; এই পদ্ধতিটি এখন পর্যন্ত ডাটাবেসে প্রয়োগ হওয়া প্রতিটি মাইগ্রেশনের জন্য "ডাউন" মাইগ্রেশন চালিয়ে কাজ করে, সুতরাং আপনি যদি পূর্বে প্রয়োগ হওয়া কোনও মাইগ্রেশন মুছে ফেলে থাকেন তবে এটি ব্যর্থ হবে (এবং একইভাবে আপনি যদি কোনও স্থানান্তর পরিবর্তন করে থাকেন তবে ব্যর্থ হতে পারে) এটি প্রয়োগ)। গৃহীত উত্তর আরো জোরালো হয়। এর জন্য -1 এবং অব্যক্ত পুনরাবৃত্তি update-database -force
মার্ক অ্যামেরি

4
@ সুইসকোডার - আপনার দু'বার একই পদক্ষেপের প্রয়োজন নেই (কমপক্ষে, আমি করিনি)। আমি মনে করি এটি একটি টাইপ ছিল।
এড গ্রাহাম

4
@ সুইসকোডার সত্যিই আমি লক্ষ্য করি না, কোনও অপরাধের উদ্দেশ্য নেই
Vima91

32

সত্তা ফ্রেমওয়ার্ককোর জন্য আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

Update-Database -Migration 0

এটি ডাটাবেস থেকে সমস্ত স্থানান্তর সরিয়ে ফেলবে। তারপরে আপনি ব্যবহার করতে পারেন:

Remove-Migration

আপনার স্থানান্তর অপসারণ করতে। শেষ পর্যন্ত আপনি নিজের স্থানান্তর পুনরায় তৈরি করতে পারেন এবং এটি ডাটাবেসে প্রয়োগ করতে পারেন।

Add-Migration Initialize
Update-Database

EFCore v2.1.0 এ পরীক্ষিত T


4
একটি যাদুমন্ত্র মত কাজ করে!
পাভেলিনিক্স


@ user77232 শুনে এটি দুঃখিত। নেট 5 এ আর কাজ করে না। আপনি কি প্যাকেজ ম্যানেজারে যে আদেশগুলি ব্যবহার করেছেন তা কি তারা পরিবর্তন করেছে? আমি কিছুদিন EF এর সাথে কাজ করি নি তাই নিশ্চিত নই।
Gizmo3399

আমি সংশোধন করেছি. এটি "-মিজারেশন 0" আমি ভেবেছিলাম যে মাইগ্রেশনটির যে নাম আপনি ফিরে যেতে চান তার নাম আপনাকেই রাখতে হবে। এটি 5 এ কাজ করে!
ব্যবহারকারী 77232

4

কেমন ..

static void Main(string[] args)
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ExampleContext>());  
    // C
    // o
    // d
    // i
    // n
    // g
}

আমি প্রোগ্রামিং সত্তা ফ্রেমওয়ার্ক থেকে এটি তুলেছি: কোড প্রথম , প্যারা 28 প্রথম সংস্করণ।


11
এটি ভাল ইডা নয়। সম্ভাবনা হ'ল এই কোডটি প্রোডাকশনে পৌঁছতে পারে এবং আপনার ক্লায়েন্টদের সাথে আপনার মাথাব্যথা শেষ হবে ...
Amadeo Gallardo

এটি কেবলমাত্র ডাটাবেসকে ড্রপ করে যদি মডেল পরিবর্তন হয়, ওপি মডেল পরিবর্তন না করেও এটিকে ফেলে দিতে চায়।
কোয়ান্টিক

1

যদি আপনি এই টিউটোরিয়ালটি অনুসরণ করে আপনার ডাটাবেস তৈরি করেন: https://msdn.microsoft.com/en-au/data/jj193542.aspx

... তাহলে এটি কার্যকর হতে পারে:

  1. সব মুছুন .mdfএবং.ldfআপনার প্রকল্প ডিরেক্টরিতে ফাইল
  2. ভিউ / এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার এ যান এবং (লোকালডিবি) \ v11.0 সাবনোড থেকে ডাটাবেস মুছুন। Https://stackoverflow.com/a/15832184/2279059 দেখুন

0

এই পদক্ষেপগুলি গ্রহণ করুন:

  1. প্রসঙ্গটি থেকে মুছে ফেলা উচিত সেই সমস্ত অবজেক্টটি মুছুন // Dbset<Item> Items{get;set;} এবং নিউজ কনসোলে এই আদেশগুলি চালান run
  2. অ্যাড-মাইগ্রেশন [প্রসঙ্গ নাম]
  3. আপডেট-ডাটাবেস-ভারবোজ

এটি টেবিল (গুলি) ফেলে দেবে যা কনটেক্সটে বিদ্যমান নয়, তবে ইতিমধ্যে ডাটাবেসে তৈরি করা হয়েছে



0

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


দেখে মনে হচ্ছে যে ওপি কমান্ড লাইনে কোনও কমান্ডের সন্ধান করেছিল, যেহেতু তারা স্পষ্টভাবে উল্লেখ করেছে update-database, এবং যেহেতু তিনি বীজ দেওয়ার কথা উল্লেখ করেছেন আমি ধরে নিলাম তারা পরীক্ষার জন্য একটি স্বয়ংক্রিয় সমাধান খুঁজছিল। সুতরাং আপনার ইউআই সমাধান সম্ভবত তারা যা খুঁজছেন তা নয়।
valkn0t

0

একটি ডাটাবেস ফেলে দেওয়ার বা বিদ্যমান ডাটাবেস আপডেট করার বিভিন্ন উপায় রয়েছে, কেবল আপনি পূর্ববর্তী স্থানান্তরগুলিতে স্যুইচ করতে পারেন।

dotnet ef database update previousMigraionName    

তবে কিছু ডাটাবেসের সীমাবদ্ধতা রয়েছে যেমন সম্পর্ক তৈরির পরে সংশোধন করার অনুমতি না দেওয়া, এর অর্থ আপনি ইফ কোর ডাটাবেস সরবরাহকারীদের কাছ থেকে কলামগুলি ছাড়ার সুযোগ পাননি তবে বেশিরভাগ সময় ef কোর ড্রপ ডাটাবেসে অনুমোদিত হয়। সুতরাং আপনি ড্রপ কমান্ড ব্যবহার করে ডিবি ছাড়তে পারেন এবং তারপরে আপনি আবার আগের স্থানান্তর ব্যবহার করেন।

dotnet ef database drop
PMC command 
PM> drop-database

অথবা আপনি ম্যানুয়ালি ডাটাবেস মুছতে এবং একটি স্থানান্তর করতে পারেন।


-2

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

  1. আপনার এমএস এসকিউএল সার্ভারের সমস্ত টেবিল মুছুন। __EF অভিবাসন টেবিলটিও মুছুন।
  2. প্রকার dotnet ef database update
  3. EF কোর এখন আপনার সর্বশেষ স্থানান্তর পর্যন্ত শূন্য থেকে ডেটাবেসটি পুনরায় তৈরি করবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.