লিনকুতে অন্তর্ভুক্ত () কী করে?


96

আমি অনেক গবেষণা করার চেষ্টা করেছি তবে আমি একজন ডিবি লোকের চেয়ে বেশি - সুতরাং এমএসডিএন-তেও ব্যাখ্যাটি আমার কাছে কোনও অর্থ দেয় না। কেউ দয়া করে ব্যাখ্যা করতে পারেন, এবং প্রশ্নের Include()বিবরণীতে কোন বিবৃতি দেয় তার কয়েকটি উদাহরণ সরবরাহ করতে পারেন SQL?


খুব বেসিক, আমি কেবল সাধারণ নির্বাচন জানি, যেখানে, এর দ্বারা আদেশ করুন, কিছু সামগ্রিক বিরোধী। আমি লিনকিউতে যোগদানের চেষ্টা করিনি, না অন্তর্ভুক্ত। আমার চূড়ান্ত লক্ষ্যটি ছিল এই লিনকিউ কোয়েরিগুলিকে এসকিউএল
সিজে

উত্তর:


169

উদাহরণস্বরূপ বলা যাক আপনি আপনার সমস্ত গ্রাহকের একটি তালিকা পেতে চান:

var customers = context.Customers.ToList();

এবং ধরে নেওয়া যাক যে প্রতিটি Customerবস্তুর সেটগুলির একটি রেফারেন্স রয়েছে Ordersএবং প্রত্যেকটির Orderরেফারেন্স রয়েছে LineItemsযা রেফারেন্স করতে পারে a Product

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

একই উদাহরণ ব্যবহার করে, এটি সম্পর্কিত সমস্ত আদেশের শিরোনাম আনতে পারে তবে অন্যান্য রেকর্ডগুলির মধ্যে একটিও নয়:

var customersWithOrderDetail = context.Customers.Include("Orders").ToList();

আপনি এসকিউএল চেয়েছিলেন হিসাবে একটি চূড়ান্ত বিষয় হিসাবে, প্রথম বিবৃতি ছাড়া Include()একটি সহজ বিবৃতি উত্পন্ন করতে পারে:

SELECT * FROM Customers;

চূড়ান্ত বিবৃতি যা কল করে তা Include("Orders")দেখতে এরকম হতে পারে:

SELECT *
FROM Customers JOIN Orders ON Customers.Id = Orders.CustomerId;

4
ধন্যবাদ. আপনার উদাহরণ ব্যবহার করে, আমি কি বলতে পারি যে আমি LineItemsএবং Productsলিনকুইয়ের কোয়েরিটিও এর মতো দেখতে চাই : var customersWithOrderDetail = context.Customers.Include("Orders").Include("LineItems").Include("Products").ToList();?
সিজে

4
হ্যাঁ, আপনি Include()পার্থক্য "পথ" বরাবর বস্তু ক্যাপচার একাধিক কল চেইন করতে পারেন। আপনি যদি একই পথে অবজেক্ট চান তবে আপনাকে কেবল একটি কল করতে হবে যা পুরো পথটি নির্দিষ্ট করে। যেহেতু LineItemsএবং Productsকোনও পাথ উপাদান ভাগ করবেন না আপনার পৃথক কল প্রয়োজন।
ইয়াক

অন্তর্ভুক্তি ব্যবহার করা কি বাধ্যতামূলক? আমি নিশ্চিত যে আমি এমন সমাধানগুলিতে কাজ করেছি যেখানে আমি এটি ব্যবহার না করে সম্পর্কিত জিনিসগুলি পেতে পারি।
জেপজেন

@ জেপজেন আপনি অলস-বোঝা সত্তা ব্যবহার করছেন কিনা তা নির্ভর করে।
ইয়াক

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

27

আমি কেবল যুক্ত করতে চেয়েছিলাম যে "অন্তর্ভুক্ত" আগ্রহী লোডিংয়ের অংশ। এটি মাইক্রোসফ্ট দ্বারা সত্ত্বা ফ্রেমওয়ার্ক 6 টিউটোরিয়ালে বর্ণিত হয়েছে। এখানে লিঙ্কটি দেওয়া আছে: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-st সূত্র / getting-st সূত্র-with-ef-used- mvc/ reading-related-data-with-theth একটি-এস্প-নেট-এমভিসি-অ্যাপ্লিকেশন-এন্টিটি-ফ্রেমওয়ার্ক


লিঙ্কযুক্ত পৃষ্ঠা থেকে অংশ:

সত্তার ফ্রেমওয়ার্ক কোনও সত্তার নেভিগেশন বৈশিষ্ট্যে সম্পর্কিত ডেটা লোড করতে পারে এমন কয়েকটি উপায় এখানে রয়েছে:

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

আগ্রহী লোড হচ্ছে। সত্তাটি যখন পড়া হয়, তখন সম্পর্কিত ডেটাগুলি তার সাথে পুনরুদ্ধার করা হয়। এটি সাধারণত একক যোগদানের ক্যোয়ারিতে ফলাফল করে যা প্রয়োজনীয় সমস্ত ডেটা পুনরুদ্ধার করে। আপনি Includeপদ্ধতিটি ব্যবহার করে আগ্রহী লোডিং নির্দিষ্ট করে দিন ।

সুস্পষ্ট লোড হচ্ছে। এটি অলস লোডিংয়ের অনুরূপ, আপনি কোডটিতে স্পষ্টভাবে সম্পর্কিত ডেটা পুনরুদ্ধার ব্যতীত; আপনি কোনও নেভিগেশন সম্পত্তি অ্যাক্সেস করলে এটি স্বয়ংক্রিয়ভাবে ঘটে না। আপনি কোনও সত্তার জন্য অবজেক্টের স্টেট ম্যানেজার এন্ট্রি পেয়ে এবং সংগ্রহকে কল করে সংগ্রহ সম্পর্কিত কল করুন a একক সত্তার অধিকারী বৈশিষ্ট্যগুলির জন্য রেফারেন্স.লুড পদ্ধতিটি সম্পর্কিতভাবে আপনি সম্পর্কিত তথ্য লোড করেন। (নিম্নলিখিত উদাহরণে, যদি আপনার কাছে অ্যাডমিনস্ট্রেটর গৌণ সম্পত্তি লোড করতে চান, তাহলে আপনি প্রতিস্থাপন চাই Collection(x => x.Courses)সঙ্গে Reference(x => x.Administrator)।) সাধারণত আপনি স্পষ্ট লোড শুধুমাত্র যখন তুমি অলস লোড বন্ধ করেছেন ব্যবহার চাই।

তারা তত্ক্ষণাত সম্পত্তি মানগুলি পুনরুদ্ধার না করার কারণে, অলস লোডিং এবং সুস্পষ্ট লোড উভয়ই মুলতুবি লোড হিসাবে পরিচিত।


4
এসও তে আপনাকে স্বাগত জানাই =) কেবলমাত্র একটি পরামর্শ তবে আপনি যখন এই জাতীয় কোনওটির উত্তর দিচ্ছেন, যদি আপনি পারেন তবে একটি কোড স্নিপেট অন্তর্ভুক্ত করুন। দুর্ভাগ্যক্রমে লিঙ্কগুলি মরে যেতে পারে।
The_Cthulhu_Kid

2

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

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

অন্যদিকে, এটি ছাড়াই, ইএফ পরে সেপার্ট কোয়েরিগুলি কার্যকর করবে, যখন আপনি প্রথম সাব-আইটেমগুলি অ্যাক্সেস করবেন।

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