এনএইচবারনেটে বনাম সেট বনাম ব্যাগের তালিকা করুন


109

NHibernate ম্যাপিং ফাইলের মধ্যে একটি তালিকা, সেট এবং ব্যাগের মধ্যে পার্থক্য কী? কীভাবে প্রত্যেকে নেট নেট সংগ্রহের সাথে সম্পর্কিত?

উত্তর:


230

এনহাইবারনেট শব্দার্থবিজ্ঞান:

  1. তালিকা: সত্তা সংগ্রহের আদেশ দেওয়া হয়েছে, সদৃশ অনুমোদিত। IListকোডে একটি। নেট ব্যবহার করুন । সূচক কলামটি এনএইচবারনেটে ম্যাপ করা দরকার।

  2. সেট করুন: অনন্য প্রতিষ্ঠানের অনর্ডারযুক্ত সংগ্রহ, নকলকে অনুমতি দেওয়া হয়নি allowed ব্যবহারের Iesi.Collection.ISetকোডে (V4 পূর্বে NH,) অথবা System.Collections.Generic.ISet(NH, V4 + +)। ওভাররাইড করা GetHashCodeএবং নকলের Equalsব্যবসায়িক সংজ্ঞা নির্দেশ করা গুরুত্বপূর্ণ । অর্ডারবাই সংজ্ঞা দিয়ে বা SortedSetফলাফলের সাথে তুলনামূলক সংজ্ঞায়িত করে বাছাই করা যায় ।

  3. ব্যাগ: সত্ত্বাগুলির অনর্ডার্ড তালিকা, নকলকে মঞ্জুরি দেওয়া। ICollection<T>কোডে একটি। নেট ব্যবহার করুন । তালিকার সূচী কলামটি ম্যাপ করা হয়নি এবং এনএইচবারনেট সম্মানিত নয়।


উত্তর: # 2, আমরা কেবল ISetপরিবর্তে কেবল নিয়মিত ব্যবহার করতে পারি না Iesi?
সের্গেই টেচেনভ

@SergeyTachenov: দেখুন stackoverflow.com/questions/9222058/... একটি সম্ভাব্য উত্তরের জন্য। যখন এই উত্তরটি লেখা হয়েছিল ইসেট কোনও। নেট এর অংশ ছিল না
মাইকেল গ্যাটুসো

এই প্রশ্নের সর্বনিম্ন জনপ্রিয় উত্তর হ্যাঁ, এনহাইবার্নেট ৪. যেহেতু সম্ভবত এই প্রশ্নটিও সম্পাদনা করা দরকার।
সের্গেই টেচেনভ

21

এনএইচবারনেটে এই সমস্ত বস্তু হ'ল এই বিমূর্ত ডেটা টাইপের (এডিটি) অন্যান্য বাস্তবায়নের মতো। অন্যান্য জিনিসগুলির জন্য নামগুলি সাধারণ যে কারণে অনলাইনে সেট এবং ব্যাগগুলি খুঁজে পাওয়া কতটা কঠিন তা আমি অবাক হয়েছিলাম, তাই আমি এখানে কিছু লিঙ্ক এবং বিবরণী তালিকাভুক্ত করেছি।

আরও বিস্তারিত তথ্যের জন্য নিম্নলিখিতটি একবার দেখুন: তালিকা , সেট এবং ব্যাগ

সাধারণ নিয়মগুলি হ'ল:

তালিকাগুলি ডিফল্টরূপে অর্ডার করা হয়, আপনি যদি কোনও বিষয়টিকে এর সূচক দ্বারা বের করতে সক্ষম হতে চান বা forলুপগুলির উপর foreachলুপের একটি অদ্ভুত স্নেহ পেতে চান তবে এগুলি ব্যবহার করুন । লিঙ্কযুক্ত তালিকার মতো আপনার প্রয়োজন মতো এগুলি অ্যাক্সেস করার দরকার নেই । এই ADT সদৃশ অনুমতি দেয়।

দয়া করে নোট করুন! যদিও ব্রায়ানডি তার উত্তরে উল্লিখিত হিসাবে তালিকাগুলি অর্ডার করা হয়েছে, ঠিক তেমন কিছুই বলা যায় না যে আপনি যখন কোনও আদেশ দ্বারা আদেশ উল্লেখ না করে আপনি এইচকিউএল কোয়েরি কার্যকর করবেন তখন আপনি ডাটাবেস থেকে প্রত্যাশা রেখেছিলেন এমনটি হওয়া উচিত। এর কারণেই কিছু লোক পরিবর্তে সেট বা ব্যাগ ব্যবহার করতে পছন্দ করেন, যাতে এটি অর্ডার হওয়ার মায়া না দেয়। যদিও আমি এটি বলছি, বেশিরভাগ সময় তারা দৃশ্যমান ক্রমে উপস্থিত হবে, কারণ তারা তালিকায় তালিকায় যুক্ত হওয়ার সাথে সাথে এনএইচবারনেট চালিত ক্যোয়ারিতে পাওয়া যায়।

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

ব্যাগ (অথবা Multisets ) হিসাবে আপনি উপরের লিঙ্ক থেকে দেখতে পারেন, সেট একটি প্রকার যা আছে এটা মধ্যে বস্তু অন্যান্য বস্তু প্রতিলিপি করা অনুমতি দেয়। এগুলি সাধারণত ব্যবহার করা হয় না, কারণ তালিকাগুলি ক্রমানুসারে অগ্রাহ্য করা যায় এবং তাই তাকে ব্যাগ হিসাবে ধরা হয়।

এগুলি এনহাইবারনেটে কীভাবে ব্যবহৃত হয় সে সম্পর্কিত, আপনি এখানে কোন এডিটি নির্বাচন করেন তার উপর ভিত্তি করে ডাটাবেস থেকে আলাদাভাবে কিছুই টানা হয় না, এটিই আপনি এটির জন্য আলাদা আলাদা এডিটি বেছে নিতে পারেন।

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


2
তালিকার সংশোধন - একটি এনএইচবারনেট ম্যাপিং ফাইলে একটি তালিকা ব্যবহার করার জন্য ডাব্লুআইএলএল একটি সূচী কলাম ম্যাপিংয়ের প্রয়োজন। এইভাবে তালিকাটি ঠিক কীভাবে রাখা হয়েছিল তা টেনে আনা হবে
মাইকেল গ্যাটুসো

@ মিশেল গ্যাটুসো ভাল পয়েন্ট, আমার উত্তরের উত্তরটিতে উল্লেখ করা উচিত ছিল যে আমি আপনার ম্যাপিং ফাইলে প্রকৃত সংগ্রহের স্পেসিফিকেশন না করে এইচকিউএল প্রশ্নগুলির (সুতরাং 'আদেশ দ্বারা আদেশ') সম্পর্কে বলছিলাম।
জয়

ব্যাগ ব্যবহারের একটি সুবিধা হ'ল আপনি যখন এতে নতুন উপাদান যুক্ত করেন তখন ডাটাবেস থেকে এগুলি লোড করতে হয় না। চেক করার জন্য কোনও সদৃশ নেই, কোনও আদেশ দেওয়ার জন্য নয়।
tvananen

1

ওয়েল প্রাথমিক পার্থক্য হ'ল তালিকাগুলিতে তালিকার তাদের অবস্থান অনুসারে সূচিযুক্ত উপাদানগুলিকে একটি অন্তর্নিহিত ক্রম থাকে। সেটগুলি এবং ব্যাগগুলিকে সাধারণত কোনও তুলনাকারী দ্বারা "অর্ডার" করা যেতে পারে বা সেই আইটেমগুলি ডিবি থেকে বেরিয়ে আসার পরে প্রয়োগ করা হয় use ব্যক্তিগতভাবে, আমি ব্যাগগুলি কখনই ব্যবহার করি নি ... যদি আমি জানতাম যে ডেটা আমার চাওয়ার দরকার তা ক্রমানুসারে অর্ডার করা হয় আমি তালিকা ব্যবহার করি অন্যথায় আমি সেট ব্যবহার করি।


0

সেট আপনাকে এতে পুনরাবৃত্তি করার উপাদানগুলিকে অনুমতি দেয় না। আপনি যদি কিছু নতুন উপাদান যুক্ত করার চেষ্টা করেন, এটি আপনার যোগ করা উপাদানের সাথে ইতিমধ্যে সংগ্রহের প্রতিটি উপাদানকে (সমান পদ্ধতিটি ব্যবহৃত হয়) তুলনা করবে এবং যদি কোনও সত্য ফিরে আসে তবে উপাদান যুক্ত করা হবে না

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