সময়ে সময়ে এটি ISession
ADO.NET সংযোগের স্থিতিকে স্মৃতিতে রাখা বস্তুর রাজ্যের সাথে সিঙ্ক্রোনাইজ করার জন্য প্রয়োজনীয় এসকিউএল স্টেটমেন্টগুলি কার্যকর করবে। এই প্রক্রিয়া, ফ্লাশ, নিম্নলিখিত পয়েন্টগুলিতে ডিফল্টরূপে ঘটে
Find()
বা এর কিছু আমন্ত্রণ থেকেEnumerable()
- থেকে
NHibernate.ITransaction.Commit()
- থেকে
ISession.Flush()
এসকিউএল বিবৃতি নিম্নলিখিত ক্রমে জারি করা হয়
- সমস্ত সত্তা সন্নিবেশ, একই ক্রমে সংশ্লিষ্ট বস্তুগুলি ব্যবহার করে সংরক্ষণ করা হয়েছিল
ISession.Save()
- সমস্ত সত্তা আপডেট
- সমস্ত সংগ্রহ মুছে ফেলা
- সমস্ত সংগ্রহ উপাদান মুছে ফেলা, আপডেট এবং সন্নিবেশ
- সমস্ত সংগ্রহ সন্নিবেশ
- সমস্ত সত্তা মুছে ফেলা, একই ক্রমে সংশ্লিষ্ট বস্তুগুলি মুছে ফেলা হয়েছিল
ISession.Delete()
(একটি ব্যতিক্রম হ'ল দেশীয় আইডি জেনারেশন ব্যবহার করা অবজেক্টগুলি সেভ করার পরে sertedোকানো হয়))
আপনি যখন স্পষ্ট করেন তখন ব্যতীত Flush()
সেশন ADO.NET কলগুলি কার্যকর করে, সেগুলি কেবল কার্যকর হয় তার ক্রম সম্পর্কে কোনও গ্যারান্টি নেই । তবে এনএইচবারনেট গ্যারান্টি দেয় যে ISession.Find(..)
পদ্ধতিগুলি কখনই বাসি ডেটা ফেরত দেবে না; না তারা ভুল তথ্য ফেরত দেবে না।
ডিফল্ট আচরণ পরিবর্তন করা সম্ভব যাতে ফ্লাশ কম ঘন ঘন ঘটে। FlushMode
সময় কমিট শুধুমাত্র ফ্লাশ (এবং শুধুমাত্র যখন NHibernate: শ্রেণি তিনটি ভিন্ন মোড সংজ্ঞায়িত ITransaction
, এপিআই ব্যবহার করা হয়) ফ্লাশ স্বয়ংক্রিয়ভাবে রুটিন, অথবা কখনো ফ্লাশ যদি না ব্যাখ্যা ব্যবহার Flush()
স্পষ্টভাবে বলা হয়। শেষ মোডটি কাজের দীর্ঘ চলমান ইউনিটগুলির জন্য দরকারী, যেখানে কোনও ISession
দীর্ঘ সময়ের জন্য উন্মুক্ত এবং সংযোগ বিচ্ছিন্ন থাকে।
...
একটি অধিবেশন শেষে চারটি স্বতন্ত্র পর্যায় জড়িত:
- অধিবেশন ফ্লাশ
- লেনদেন প্রতিশ্রুতিবদ্ধ
- সেশন বন্ধ করুন
- ব্যতিক্রমগুলি পরিচালনা করুন
অধিবেশন ফ্লাশিং
যদি আপনি ITransaction
এপিআই ব্যবহার করে থাকেন তবে আপনার এই পদক্ষেপটি নিয়ে চিন্তা করার দরকার নেই। লেনদেন প্রতিশ্রুতিবদ্ধ হয় যখন এটি স্পষ্টভাবে সঞ্চালিত হবে। অন্যথায় আপনার ISession.Flush()
পরিবর্তনগুলি ডাটাবেসের সাথে সিঙ্ক্রোনাইজ করা হয়েছে তা নিশ্চিত করার জন্য কল করা উচিত ।
ডাটাবেস লেনদেন প্রতিশ্রুতিবদ্ধ
আপনি যদি এনএইচবারনেট আইটি ট্রান্সজিশন এপিআই ব্যবহার করে থাকেন তবে এরকম দেখাচ্ছে:
tx.Commit(); // flush the session and commit the transaction
আপনি যদি নিজে ADO.NET লেনদেন পরিচালনা করে থাকেন তবে আপনাকে নিজে Commit()
ADO.NET লেনদেন করা উচিত ।
sess.Flush();
currentTransaction.Commit();
যদি আপনি নিজের পরিবর্তনগুলি না করার সিদ্ধান্ত নেন:
tx.Rollback(); // rollback the transaction
বা:
currentTransaction.Rollback();
যদি আপনি লেনদেনটি রোলব্যাক করেন তবে আপনার অবিলম্বে বর্তমান সেশনটি বন্ধ করে দেওয়া উচিত এবং এনএইচবার্নেটের অভ্যন্তরীণ স্থিতিশীলতা স্থিতিশীল রয়েছে তা নিশ্চিত করতে হবে session
আইশনের সমাপ্তি
ISession.Close()
একটি অধিবেশন শেষে চিহ্নিত করার জন্য একটি কল । ক্লোজ () এর মূল নিদর্শনটি হ'ল ADO.NET সংযোগটি অধিবেশন দ্বারা ত্যাগ করা হবে।
tx.Commit();
sess.Close();
sess.Flush();
currentTransaction.Commit();
sess.Close();
যদি আপনি নিজের সংযোগ সরবরাহ করেন তবে Close()
এটিতে একটি রেফারেন্স দেয়, যাতে আপনি নিজে এটি বন্ধ করতে পারেন বা এটি পুলটিতে ফিরিয়ে দিতে পারেন। অন্যথায় Close()
এটি পুলে ফেরত দেয়।