সত্তা ফ্রেমওয়ার্ক কোডে আমি কীভাবে অবজেক্টগুলিকে আলাদা করব?


উত্তর:


156

আপনি যদি বিদ্যমান অবজেক্টটি বিচ্ছিন্ন করতে চান তবে @ স্যালুমার পরামর্শ অনুসরণ করুন। আপনি যদি পরিবর্তনগুলি ট্র্যাকিং ছাড়াই লোড করতে চান তবে ব্যবহার করুন:

var data = context.MyEntities.AsNoTracking().Where(...).ToList();

মন্তব্য হিসাবে উল্লিখিত হিসাবে এটি সত্তা সম্পূর্ণরূপে বিচ্ছিন্ন করবে না। তারা এখনও সংযুক্ত এবং অলস লোডিংয়ের কাজ করে তবে সত্তা ট্র্যাক করা হয় না। উদাহরণস্বরূপ এটি ব্যবহার করা উচিত যদি আপনি কেবল ডেটা পড়তে সত্তা লোড করতে চান এবং আপনি সেগুলি পরিবর্তন করার পরিকল্পনা করেন না।


3
@ লাডিস্লাভ: এটি সম্ভবত লল কোডার বলতে চাইছিল। আমি এই পদ্ধতির ব্যবহার এবং ভাবিনি কখনই আমি প্রায়শই বস্তুর তালিকাগুলি লোড করি এবং প্রসঙ্গটি একবারে নিষ্পত্তি করি, এরকম কিছু using(ctx){ return ctx....ToList(); }। এই জাতীয় ক্ষেত্রে ব্যবহার করা AsNoTracking()অনেক অর্থবোধ করতে পারে কারণ আমি অযথা অবজেক্টের প্রসঙ্গটি পূরণ করা সঞ্চয় করব। আমার ধারণা এটির সম্ভবত বিশেষত বড় তালিকাগুলির জন্য একটি পারফরম্যান্স এবং মেমরির খরচ উপকার হবে?
স্লুমা

1
@ স্লুমা: হ্যাঁ এতে পারফরম্যান্স সুবিধা রয়েছে। এই কারণেই এই পদ্ধতিটি বিদ্যমান। অবজেক্টকন্টেক্সট এপিআইতে এই পদ্ধতির ব্যবহারটি কিছুটা জটিল।
লাদিস্লাভ Mrnka

2
এই অলস লোডিং অক্ষম করে?
শান ম্লেয়ান

3
আসলে এটি অলস লোডিং অক্ষম করবে না এটি কেবল পরিবর্তন ট্র্যাকিং অক্ষম করবে এবং কার্য সম্পাদন করবে = সত্তা এখনও সংযুক্ত রয়েছে। আমি এই প্রশ্নের উত্তর দেওয়ার পরে এটি পেয়েছি যাতে আপনার @ স্লুমার একটিটিকে বৈধ উত্তর হিসাবে চিহ্নিত করা উচিত।
লাদিস্লাভ মৃঙ্কা

1
এটাই আমি চাই. আমি অলস লোডিং এবং কেবল একটি বিচ্ছিন্ন সত্তাকে সংশোধন করার ক্ষমতা চাই।
শন ম্লেয়ান

255

এটি একটি বিকল্প:

dbContext.Entry(entity).State = EntityState.Detached;

3
আইকিউয়েরেবলকে ফেরত পাওয়া অবজেক্টগুলি পুনরুদ্ধার করার সময় আমি কি এটি করতে পারি?
শন ম্লেয়ান

1
@ লল কোডার: আমি আপনাকে সঠিকভাবে বুঝতে পেরেছি কিনা তা নিশ্চিত নই, তবে entityঅবশ্যই এমন কোনও ধরণের একটি বস্তুগত বস্তু হতে হবে যা আপনার মডেল শ্রেণীর (ব্যক্তি, গ্রাহক, আদেশ ইত্যাদি) অংশ part আপনি সরাসরি কোনও আইকোয়্যারেবল <T> এ প্রবেশ করতে পারবেন না dbContext.Entry(...)। এই প্রশ্নটি কি আপনি বোঝাতে চেয়েছেন?
স্লুমা

9
@ এলাদবেনদা: এটি নির্ভর করে। আপনি যদি ইতিমধ্যে প্রসঙ্গে সংযুক্ত কোনও বস্তুটি আলাদা করতে চান তবে রাষ্ট্রটি এতে সেট করুন Detached। আপনি যদি ডিবি থেকে সত্ত্বাগুলি কোনও প্রসঙ্গে সংযুক্ত না করে লোড করতে চান (কোনও ট্র্যাকিং পরিবর্তন হবেন না), ব্যবহার করুন AsNoTracking
স্লুমা

1
আমি এই পদ্ধতিতে একটি আকর্ষণীয় সমস্যা পেয়েছি। সত্তা প্রক্সি শ্রেণি হতে পারে তবুও অলস লোডিং এর রাজ্যে পরিবর্তন করার পরে কাজ করবে না Detached
kjbartel

4
@ কেজেবার্টেল: এটি প্রত্যাশিত আচরণ, যেহেতু সত্তার প্রসঙ্গে কোনও যোগসূত্র নেই।
রিকার্ডো সুজা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.