এনএইচবারনেটে বিপরীত বৈশিষ্ট্য


89

আমি কীভাবে বিপরীত বৈশিষ্ট্যটি ব্যবহার করব? যদি আমার ভুল না হয় তবে একের সাথে অনেকগুলি সম্পর্কের জন্য বিপরীত বৈশিষ্ট্যটি সত্য হতে হবে। বহু-থেকে-বহু সম্পর্কের জন্য, সত্তা শ্রেণীর বিপরীত বৈশিষ্টগুলির মধ্যে একটিতে সত্যকে সেট করতে হবে এবং অন্যটিকে মিথ্যাতে সেট করতে হবে।

কেউ কি এর উপর কিছু আলোকপাত করতে পারে?


4
আপনি আমার উত্তরটিও পরীক্ষা করতে পারেন, " কখন ব্যবহার করতে হবে বিপরীত =" সত্য | মিথ্যা " ", একই প্রশ্নের জন্য।
ড্যানিয়েল শিলিং

উত্তর:


126

বিপরীত বৈশিষ্ট্যটি সত্যে সেট করা উচিত নয় ...

আপনি সমিতির 'মালিক' নির্দিষ্ট করতে বিপরীত বৈশিষ্ট্যটি ব্যবহার করেন। (কোনও সংস্থার কেবলমাত্র একজন মালিক থাকতে পারে, তাই একটি প্রান্তটি বিপরীতে সেট করতে হবে, অন্যটি 'বি-বিপরীত' হিসাবে সেট করতে হবে)। (মালিক: inverse=falseঅ-মালিক inverse=true:)

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

আপনি যখন সংগ্রহটির শেষটিকে 'বিপরীতমুখী' হিসাবে চিহ্নিত করেন, তখন এনএইচবারনেট প্রথমে সংগ্রহটির 'মালিকানাধীন' সত্তাটি ধরে রাখবে, এবং অতিরিক্ত আপডেটের বিবৃতি এড়িয়ে পরবর্তী সময়ে সংগ্রহে থাকা সত্তাগুলি ধরে রাখবে।

সুতরাং, দ্বি-দিকনির্দেশক সমিতিতে আপনার সর্বদা একটি বিপরীত প্রান্ত থাকে।


4
এটি কেবল মালিককে যুক্ত করার জন্য সমস্ত কিছু ব্যাখ্যা করে যা টেবিলে বিদেশী কী রয়েছে
ব্রিজেশ মিশ্র

48
আমার মতে এটি সত্যই খারাপ পরিভাষা। কেন 'বিপরীতমুখী' না হয়ে মালিকানা চিহ্নিত করবেন ?!
আপড্রিউক

4
ইতিমধ্যে অবহেলিত পদটিতে অবহেলা ব্যবহারের জন্য +1 :) "" ইনভারস অ্যাট্রিবিউটটি সত্য হিসাবে সেট করা উচিত নয় "
কন্টাক্টমেট

ভাল উত্তর, একমাত্র প্রশ্নটি কীভাবে "মালিক" হওয়া উচিত তা ঠিক করবেন
পান্ডাউড

অনেকগুলি থেকে অনেকের কী আপনি যখন একটি মাঝারি টেবিলটি রাখেন যা 2 টি সত্তার মধ্যে সম্পর্ক রাখে?
অন্ধকার_কানাইট

10

উপরের উত্তর ছাড়াও , এবং আমার বোঝাপড়া অনুসারে, আপনাকে সংগ্রহের বৈদেশিক কী মানটি ম্যানুয়ালি বজায় রাখতে হবে, এটি যদি আপনি অতিরিক্ত আপডেটের বিবৃতি না চান:

Parent par = Session.Get<Parent>(8);

Child ch = new Child();
ch.Name = "Emad";

//set the parent foreign key manually
ch.MyParent = par;

par.MyChildren.Add(ch);
Session.Save(par);

বিপরীত বৈশিষ্ট্যের আরও ব্যাখ্যার জন্য, নিম্নলিখিত পোস্টটি দেখুন:

http://www.emadashi.com/index.php/2008/08/nhibernate-inverse-attribute/


2

আমি দেখতে পাচ্ছি যে "মালিক" কোথায় আসে, তবে একটি সমিতি একটি পাইপ হয় এবং আপনি উভয় প্রান্তটি নীচে দেখতে পারেন, তাই পাইপটি কোন সত্তার "মালিকানাধীন" তা বলার দরকার নেই।

এটি দেখার একটি ভিন্ন উপায় হ'ল, ওয়ান টু অনেক সম্পর্কের মধ্যে আসলে 2 টি সম্পর্ক চলছে।

সম্পর্ক 1: অনেক সন্তানের কাছে পিতামাতার।

সম্পর্ক 2: প্রতিটি সন্তানের একজন পিতামাতার কাছে

সুতরাং এনএইচ এগুলির প্রত্যেককে ডিবিতে সংরক্ষণ করার জন্য স্কয়ার চালানোর চেষ্টা করবে। তবে এটির প্রয়োজন নেই কারণ যখন আপনি কোনও বিদেশী কী যেমন 2 রক্ষা করার সময় সম্পর্ক 2 তে সেট করেন তখন এটি স্বয়ংক্রিয়ভাবে সন্তানের সাথে পিতামাতার সম্পর্ক স্থির করে দেয় কারণ সম্পর্ক 1 সম্পর্কের 2 "বিপরীত" ।

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

আমি ধরে নেব যে আপনি যদি এনএইচকে এটি একটি বিপরীতমুখী না বলে দেন, তবে এটি বিপরীত সম্পর্কটি চেষ্টা করার জন্য এবং স্কয়ার করার ক্ষেত্রে প্রচেষ্টাটি নষ্ট করবে - যদিও এটির প্রয়োজন হয়নি।

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