সতর্কতা: নীচেরগুলি কেবলমাত্র ছোট টেবিলের জন্য উপযুক্ত (চিন্তা করুন <1000 সারি)
এখানে একটি সমাধান রয়েছে যা সারিগুলি মোছার জন্য সত্তা কাঠামো (এসকিউএল নয়) ব্যবহার করে, সুতরাং এটি এসকিউএল ইঞ্জিন (আর / ডিবিএম) নির্দিষ্ট নয়।
এটি ধরে নিয়েছে যে আপনি এটি পরীক্ষা বা অন্য কিছু অনুরূপ পরিস্থিতির জন্য করছেন। উভয় ক্ষেত্রেই
- তথ্য পরিমাণ কম বা
- পারফরম্যান্সে কিছু যায় আসে না
কেবল কল করুন:
VotingContext.Votes.RemoveRange(VotingContext.Votes);
এই প্রসঙ্গে অনুমান:
public class VotingContext : DbContext
{
public DbSet<Vote> Votes{get;set;}
public DbSet<Poll> Polls{get;set;}
public DbSet<Voter> Voters{get;set;}
public DbSet<Candidacy> Candidates{get;set;}
}
পরিপাটি কোডের জন্য আপনি নিম্নলিখিত এক্সটেনশন পদ্ধতিটি ঘোষণা করতে পারেন:
public static class EntityExtensions
{
public static void Clear<T>(this DbSet<T> dbSet) where T : class
{
dbSet.RemoveRange(dbSet);
}
}
তারপরে উপরেরটি হয়ে যায়:
VotingContext.Votes.Clear();
VotingContext.Voters.Clear();
VotingContext.Candidacy.Clear();
VotingContext.Polls.Clear();
await VotingTestContext.SaveChangesAsync();
আমি প্রতিটি টেস্টকেস রানের জন্য আমার পরীক্ষামূলক ডাটাবেস পরিষ্কার করার জন্য সম্প্রতি এই পদ্ধতির ব্যবহার করেছি (এটি প্রতিটি সময় স্ক্র্যাচ থেকে ডিবি পুনরুদ্ধার করার চেয়ে স্পষ্টতই দ্রুততর, যদিও আমি উত্পন্ন মুছে ফেলা কমান্ডগুলির ফর্মটি পরীক্ষা করিনি))
এটা ধীর হতে পারে কেন?
- EF সমস্ত সারি পাবে (ভোটিং কনটেক্সট.ভোটস)
- এবং তারপরে তাদের মুছে ফেলার জন্য তাদের আইডি ব্যবহার করবেন (ঠিক কীভাবে কোনও ব্যাপার হয় তা নিশ্চিত নয়)।
সুতরাং যদি আপনি মারাত্মক পরিমাণে ডেটা নিয়ে কাজ করছেন তবে আপনি এসকিউএল সার্ভার প্রক্রিয়াটি (এটি সমস্ত স্মৃতি গ্রাস করবে) এবং আইআইএস প্রক্রিয়াটির জন্য একই জিনিসটি EF এসকিউএল সার্ভারের মতো সমস্ত ডেটা ক্যাশে করবে বলে হত্যা করবে। যদি আপনার টেবিলটিতে মারাত্মক পরিমাণে ডেটা থাকে তবে এটি ব্যবহার করবেন না।
TRUNCATE
পড়লে আমি অবাক হয়েছি কেন এই বিজ্ঞাপনগুলির কোনওটিই বিদেশী কী বাধা সম্পর্কে চিন্তা করে না।