কি পার্থক্য .AsNoTracking () কি করে?


228

.AsNoTracking()এক্সটেনশন সম্পর্কিত আমার একটি প্রশ্ন রয়েছে , কারণ এটি সমস্ত নতুন এবং বেশ বিভ্রান্তিকর।

আমি একটি ওয়েবসাইটের জন্য প্রতি অনুরোধ প্রসঙ্গ ব্যবহার করছি।

আমার প্রচুর সত্তা পরিবর্তন হয় না তাই ট্র্যাক করার দরকার নেই, তবে আমার নিম্নলিখিত পরিস্থিতি রয়েছে যেখানে আমি ডাটাবেসে যা যাচ্ছি তা সম্পর্কে নিশ্চিত নই, বা এমনকি এটির ক্ষেত্রে এটি কোনও পার্থক্য করে কিনা।

এই উদাহরণটি আমি বর্তমানে এটি করছি:

context.Set<User>().AsNoTracking()
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

এটি উপরের মত একই তবে .AsNoTracking()পদক্ষেপ 1 থেকে অপসারণ :

context.Set<User>();
// Step 1) Get user
context.Set<User>()
// Step 2) Update user

পদক্ষেপ 1 এবং 2 একই প্রসঙ্গ ব্যবহার করে তবে বিভিন্ন সময়ে ঘটে। আমি যে কাজ করতে পারি না তা হ'ল কোনও পার্থক্য আছে কি না। পদক্ষেপ 2 একটি আপডেট হিসাবে আমি অনুমান করছি যে উভয়ই যাইহোক দুইবার ডাটাবেস হিট করবে।

কেউ কি বলতে পারেন পার্থক্য কি?

উত্তর:


187

পার্থক্যটি হ'ল প্রথম ক্ষেত্রে পুনরুদ্ধারকৃত ব্যবহারকারী প্রসঙ্গ দ্বারা ট্র্যাক করা যায় না তাই আপনি যখন ব্যবহারকারীকে ডাটাবেসে সংরক্ষণ করতে যাবেন তখন আপনাকে অবশ্যই এটি সংযুক্ত করে ব্যবহারকারীর সঠিক অবস্থান নির্ধারণ করতে হবে যাতে EF জানে যে এটি বিদ্যমান ব্যবহারকারীর আপডেট হওয়া উচিত পরিবর্তে একটি নতুন সন্নিবেশ করা। দ্বিতীয় ক্ষেত্রে আপনার এটি করার দরকার নেই আপনি যদি একই প্রসঙ্গের উদাহরণ সহ ব্যবহারকারীকে লোড এবং সংরক্ষণ করেন তবে ট্র্যাকিংয়ের ব্যবস্থাটি আপনার পক্ষে এটি পরিচালনা করে।


1
নির্বাচিত ক্যোয়ারিতে আমরা বেনাম শ্রেণীর জন্য একই সুবিধা পেতে পারি, যেমন প্রসঙ্গ U ব্যবহারকারীরা বেছে নিন (u => নতুন {নাম = u.Name})? ধন্যবাদ।
দিলহান জয়থিলাকে

6
@ দিলহান জয়থিলাকে: বেনামে শ্রেণিগুলি সত্তাকেই প্রতিনিধিত্ব করে না তাই তাদের ট্র্যাকিং নেই।
লাডিস্লাভ Mrnka

1
যেহেতু EF6 কখনও কখনও কোনও ভিউতে সত্তা কীটি ভুলভাবে অনুপ্রবেশ করে, AsNoTracking () কীটিকে উপেক্ষা করে এবং তাই কী নিজেই কীটি ঠিক করার বিকল্প হতে পারে (ধরে নিলে কীটির অন্যান্য সুবিধার দরকার নেই)।
ক্রোকুসেক

4
এছাড়াও লক্ষ করুন, AsNoTracking এর সবচেয়ে বড় প্রভাবটি হ'ল অলস লোডিং কাজ করবে না
ডগলাস গ্যাসকেল

170

এই পৃষ্ঠাটি সত্তা ফ্রেমওয়ার্ক এবং AsNoTracking দেখুন

AsNoTracking কী করে

সত্তা ফ্রেমওয়ার্ক আপনাকে আপনার অ্যাপ্লিকেশনগুলির পারফরম্যান্স অনুকূল করতে সহায়তা করার জন্য বেশ কয়েকটি পারফরম্যান্স টিউনিং বিকল্পগুলি প্রকাশ করে। এই টিউনিং বিকল্পগুলির মধ্যে একটি .AsNoTracking()। এই অপ্টিমাইজেশন আপনাকে Entity Frameworkকোয়েরির ফলাফলগুলি ট্র্যাক না করতে বলার অনুমতি দেয় । এর অর্থ হ'ল Entity Frameworkকোয়েরি দ্বারা ফিরে আসা সত্তাগুলির কোনও অতিরিক্ত প্রক্রিয়াজাতকরণ বা স্টোরেজ সম্পাদন করে না। যাইহোক, এর অর্থ হ'ল আপনি এই সত্তাগুলি ট্র্যাকিং গ্রাফে পুনরায় সংযুক্ত না করে আপডেট করতে পারবেন না।

AsNoTracking ব্যবহার করে লাভযোগ্য পারফরম্যান্স লাভ রয়েছে


11
দেখে মনে হচ্ছে লাভগুলি কখনও কখনও ভারসাম্যহীন হতে পারে: stackoverflow.com/questions/9259480/…
ফ্যাব্রিস

3
একটি পদক্ষেপের অন্তর্ভুক্ত একটি পিতামাতার সন্তানের সম্পর্ক লোড করা একটি জটিল প্রশ্নের সাথে আমার পারফরম্যান্স লাভ প্রায় 50% ছিল
কার্ল

53

সত্তা কোয়েরিতে কোনও ট্র্যাকিং লিংক নেই

আপনার কোয়েরি পড়ার ক্রিয়াকলাপের জন্য যখন বোঝানো হয় তখন AsNoTracking () এর ব্যবহারের প্রস্তাব দেওয়া হয়। এই পরিস্থিতিতে আপনি আপনার সত্তাগুলি ফিরে পাবেন তবে সেগুলি আপনার প্রসঙ্গ দ্বারা ট্র্যাক করা যায় না his এটি ন্যূনতম মেমরির ব্যবহার এবং অনুকূল কর্মক্ষমতা নিশ্চিত করে

পেশাদাররা

  1. নিয়মিত লিনকিউ প্রশ্নের উপর উন্নত পারফরম্যান্স।
  2. সম্পূর্ণ বস্তুগত বস্তু।
  3. প্রোগ্রামিং ভাষায় অন্তর্নির্মিত বাক্য গঠন সহ সহজ লেখার জন্য।

কনস

  1. সিইডি অপারেশনের জন্য উপযুক্ত নয়।
  2. কিছু প্রযুক্তিগত বিধিনিষেধ, যেমন: আউটর জয়েন প্রশ্নের জন্য ডিফল্টআইফেম্পটি ব্যবহার করে এমন প্যাটার্নগুলির ফলে সত্তা এসকিউএল-এ সরল আউটর জয়েন্ট স্টেটমেন্টের চেয়ে আরও জটিল প্রশ্নগুলির ফলাফল হয়।
  3. আপনি এখনও সাধারণ প্যাটার্ন মিলের সাথে LIKE ব্যবহার করতে পারবেন না।

আরও তথ্য এখানে উপলব্ধ:

সত্তা ফ্রেমওয়ার্কের জন্য পারফরম্যান্স বিবেচনা

সত্তা ফ্রেমওয়ার্ক এবং NoTracking


34

ট্র্যাকিং অক্ষম করার ফলে আপনার ফলাফল সেটগুলি মেমরিতে প্রবাহিত হবে। আপনি যখন বড় আকারের ডেটা নিয়ে কাজ করছেন এবং একসাথে ডেটার পুরো সেট প্রয়োজন হয় না তখন এটি আরও কার্যকর।

তথ্যসূত্র:


10

AsNoTracking () EF এর "প্রতি রেকর্ডে অনন্য কী" প্রয়োজনীয়তাটিকে বাইপাস করার অনুমতি দেয় (অন্যান্য উত্তর দ্বারা স্পষ্টভাবে উল্লেখ করা হয়নি)।

কোনও অনন্য কী সমর্থন করে না এমন একটি ভিউ পড়ার সময় এটি অত্যন্ত সহায়ক কারণ সম্ভবত কিছু ক্ষেত্রগুলি অযোগ্য বা দর্শনটির প্রকৃতি যুক্তিযুক্তরূপে সূচকযোগ্য নয়।

এই ক্ষেত্রেগুলির জন্য "কী" যে কোনও অ-অযোগ্য কলামে সেট করা যেতে পারে তবে তারপরে AsNoTracking () অবশ্যই প্রতিটি প্রশ্নের সাথে রেকর্ড (কী দ্বারা সদৃশ) এড়ানো হবে ipped


2
ভিউজের সাহায্যে এর গুরুত্বটি পুনরুক্ত করার জন্য, আমার কাছে একটি ভিউ থেকে একটি ক্যোয়ারী রয়েছে যা এসএসএমএসের মাধ্যমে চালিত হওয়ার পরে unique টি অনন্য রেকর্ড দেয়। যখন ইএফ এর মাধ্যমে চালিত হয়, AsNoTracking পরিবর্তনকারী ছাড়াই, আমি প্রথম রেকর্ড পাই, দ্বিতীয়টির তিনটি অনুলিপি এবং তৃতীয়টির তিনটি অনুলিপি পাব। এটি ঠিক করতে অনেকগুলি অবিশ্বাস্য হেড-স্ক্র্যাচিং নিয়েছিল এবং এটি আসনো ট্র্যাকিং ব্যবহার করছে যা এটি ঠিক করেছে!
এডি

কোনও প্রাথমিক কী না দিয়ে একটি ভিউ জিজ্ঞাসা করার সময় সত্তাগুলিতে লিনক ব্যবহার করার সময় আমার ঠিক একই সমস্যা ছিল। মাথার স্ক্র্যাচিংয়ের অর্ধ দিন পরে কেবল আসনো ট্র্যাকিংয়ের বিষয়েই সন্ধান পেয়েছি। এই এএসপি.নেট ফোরামের পোস্টটি শেষ পর্যন্ত আমাকে এতে নিয়ে গেছে। forums.asp.net/t/…
red_dorian

6

আপনার যদি ডিবিতে কিছু অন্যরকম পরিবর্তন ঘটে (অন্য প্রক্রিয়া বলুন) এবং আপনার যদি এই পরিবর্তনগুলি দেখতে পান তবে তা নিশ্চিত করে নেওয়া দরকার AsNoTracking(), অন্যথায় EF আপনাকে আপনার প্রসঙ্গে পরিবর্তিত শেষ কপিটি দিতে পারে, সুতরাং প্রতিটি ক্যোয়ারীতে সাধারণত একটি নতুন প্রসঙ্গ ব্যবহার করা ভাল being :

http://codethug.com/2016/02/19/Entity-Framework-Cache-Busting/

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