NHibernate সেটআপ এবং কনফিগারেশন প্রক্রিয়া কিছুটা জটিল হতে পারে, তবে এটি অনেক শক্তিশালী ORM ফিচার প্রদান করে। এখানে আমরা NHibernate সেটআপ এবং কনফিগারেশনের জন্য প্রয়োজনীয় ধাপগুলো দেখবো।
1. NHibernate প্যাকেজ ইনস্টল করা
NHibernate ব্যবহার করতে হলে প্রথমে আপনার প্রোজেক্টে NHibernate প্যাকেজ ইনস্টল করতে হবে। যদি আপনি NuGet প্যাকেজ ম্যানেজার ব্যবহার করেন, তাহলে নিচের কমান্ডটি চালিয়ে NHibernate প্যাকেজ ইনস্টল করতে পারেন:
Install-Package NHibernate
এছাড়া, যদি আপনি .NET CLI ব্যবহার করেন, তাহলে নিচের কমান্ডটি ব্যবহার করতে পারেন:
dotnet add package NHibernate
এই কমান্ডের মাধ্যমে NHibernate এর সর্বশেষ সংস্করণ ইনস্টল হবে।
2. NHibernate কনফিগারেশন ফাইল তৈরি করা
NHibernate কনফিগারেশনের জন্য একটি XML ফাইল প্রয়োজন হয়। এই ফাইলটি ডেটাবেস সংযোগের তথ্য এবং ম্যাপিং কনফিগারেশন ধারণ করে। সাধারণত, এটি hibernate.cfg.xml নামে থাকে। নিচে একটি উদাহরণ দেখানো হলো:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- ডেটাবেস কানেকশন স্ট্রিং -->
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="hibernate.connection.connection_string">Server=yourserver;Database=yourdb;Integrated Security=True;</property>
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!-- অন্যান্য কনফিগারেশন -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ক্যাশিং কনফিগারেশন -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<!-- জেনেরিক ম্যাপিং ফাইল -->
<mapping assembly="YourAssemblyName"/>
</session-factory>
</hibernate-configuration>
এখানে আপনি ডেটাবেস কানেকশন, ডায়ালেক্ট, ক্যাশিং ইত্যাদির জন্য কনফিগারেশন প্রদান করবেন। hibernate.cfg.xml ফাইলটি সাধারণত প্রোজেক্টের bin ফোল্ডারে রাখা হয়।
3. NHibernate সেশন ফ্যাক্টরি সেটআপ করা
SessionFactory হল NHibernate এর মূল উপাদান, যা সেশন তৈরি করতে ব্যবহৃত হয়। এটি কনফিগারেশন ফাইল থেকে তথ্য নিয়ে সেশন তৈরি করতে সক্ষম হয়। NHibernate সেটআপ করার পর, সেশন ফ্যাক্টরি তৈরি করার জন্য নিচের কোডটি ব্যবহার করতে হবে:
using NHibernate;
using NHibernate.Cfg;
public class NHibernateHelper
{
private static ISessionFactory sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure(); //hibernate.cfg.xml ফাইল লোড হবে
sessionFactory = configuration.BuildSessionFactory();
}
return sessionFactory;
}
}
}
এখানে, NHibernateHelper ক্লাসটি সেশন ফ্যাক্টরি তৈরি এবং এক্সেস করার জন্য ব্যবহার করা হয়। Configure() মেথডটি hibernate.cfg.xml ফাইলের কনফিগারেশন লোড করে এবং BuildSessionFactory() সেশন ফ্যাক্টরি তৈরি করে।
4. সেশন এবং ট্রানজেকশন পরিচালনা করা
একবার সেশন ফ্যাক্টরি তৈরি হয়ে গেলে, আপনি Session তৈরি করে ডেটাবেস অপারেশনগুলো পরিচালনা করতে পারেন। সেশন একটি ডেটাবেসের সাথে সংযোগ স্থাপন এবং ডেটাবেস থেকে বা ডেটাবেসে ডেটা রিড/রাইট করতে ব্যবহৃত হয়। ট্রানজেকশন ব্যবহার করে আপনি একাধিক অপারেশনকে একত্রিত করে অ্যাটমিক কার্যক্রম পরিচালনা করতে পারেন।
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
try
{
// অবজেক্ট তৈরি বা রিট্রাইভ
var employee = new Employee { Name = "John Doe", Age = 30 };
session.Save(employee);
transaction.Commit(); // ট্রানজেকশন কমপ্লিট
}
catch (Exception)
{
transaction.Rollback(); // কোনো সমস্যা হলে রোলব্যাক
}
}
}
এখানে OpenSession() সেশন তৈরি করে এবং BeginTransaction() ট্রানজেকশন শুরু করে। যদি সব কিছু ঠিক থাকে, তাহলে ট্রানজেকশন Commit() করা হয়, নাহলে Rollback() ব্যবহার করে রোলব্যাক করা হয়।
5. ম্যাপিং কনফিগারেশন
এখন আপনাকে ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে হবে। NHibernate ম্যাপিং ফাইল বা Fluent API ব্যবহার করে এই ম্যাপিংটি সম্পন্ন করা যায়। সাধারণভাবে, Hbm (Hibernate Mapping) ফাইল বা Fluent API ব্যবহার করে এই কাজটি করা হয়।
XML ম্যাপিং উদাহরণ:
<class name="Employee" table="Employees">
<id name="Id" column="EmployeeId">
<generator class="identity"/>
</id>
<property name="Name" column="Name"/>
<property name="Age" column="Age"/>
</class>
Fluent API ম্যাপিং উদাহরণ:
public class EmployeeMap : ClassMapping<Employee>
{
public EmployeeMap()
{
Table("Employees");
Id(x => x.Id, m => m.Generator(Generators.Identity));
Property(x => x.Name);
Property(x => x.Age);
}
}
এখানে, Employee ক্লাসের সাথে Employees টেবিলের সম্পর্ক ম্যাপ করা হয়েছে। Id, Property ইত্যাদি ট্যাগ দ্বারা প্রতিটি প্রোপার্টি বা কলাম নির্ধারণ করা হয়।
6. ম্যাপিং রেজিস্ট্রেশন এবং সেশন তৈরি করা
এবার আপনাকে ম্যাপিং ফাইলগুলো রেজিস্টার করতে হবে এবং সেশন ফ্যাক্টরি তৈরি করার সময় এগুলিকে অন্তর্ভুক্ত করতে হবে। নিচে এর উদাহরণ দেওয়া হল:
var configuration = new Configuration();
configuration.Configure(); //hibernate.cfg.xml ফাইল লোড হবে
configuration.AddAssembly("YourAssemblyName"); // আপনার অ্যাসেম্বলি রেজিস্টার করুন
sessionFactory = configuration.BuildSessionFactory();
এখানে AddAssembly() মেথডটি ম্যাপিং ফাইলগুলির জন্য অ্যাসেম্বলি রেজিস্টার করে।
সারাংশ
NHibernate এর সেটআপ এবং কনফিগারেশন প্রক্রিয়া কিছুটা জটিল, তবে একবার সেটআপ হয়ে গেলে এটি শক্তিশালী এবং অত্যন্ত কাস্টমাইজযোগ্য ORM ফ্রেমওয়ার্ক হিসেবে কাজ করে। সেশন ফ্যাক্টরি তৈরি, ট্রানজেকশন ম্যানেজমেন্ট, ডেটাবেস সংযোগ এবং ম্যাপিং কনফিগারেশন সঠিকভাবে করা হলে আপনি সহজেই ডেটাবেস অপারেশন পরিচালনা করতে পারবেন।
NHibernate ব্যবহার করতে হলে প্রথমে আপনাকে প্রোজেক্টে NHibernate প্যাকেজ এবং এর নির্ভরশীল অন্যান্য প্যাকেজগুলো ইন্সটল করতে হবে। NHibernate একটি ORM ফ্রেমওয়ার্ক যা ডেটাবেস এবং অবজেক্ট মডেলগুলোর মধ্যে সম্পর্ক স্থাপন করতে সহায়তা করে। নিচে আমরা বিস্তারিতভাবে আলোচনা করবো কীভাবে NHibernate ইন্সটল করতে হয় এবং প্রোজেক্টে প্রয়োজনীয় প্যাকেজগুলো অন্তর্ভুক্ত করতে হয়।
1. NHibernate প্যাকেজ ইনস্টল করা
NHibernate এর প্রাথমিক প্যাকেজটি ইনস্টল করতে NuGet Package Manager ব্যবহার করা হয়। আপনি NuGet ব্যবহার করে NHibernate এর সর্বশেষ সংস্করণ ইনস্টল করতে পারবেন।
NuGet Package Manager Console থেকে NHibernate ইনস্টল
Visual Studio এর NuGet Package Manager Console এ নিচের কমান্ডটি রান করুন:
Install-Package NHibernate
এটি NHibernate এর সর্বশেষ স্থিতিশীল সংস্করণ আপনার প্রোজেক্টে ইনস্টল করবে।
.NET CLI ব্যবহার করে NHibernate ইনস্টল
যদি আপনি .NET CLI ব্যবহার করেন, তাহলে নিচের কমান্ডটি ব্যবহার করতে পারেন:
dotnet add package NHibernate
এই কমান্ডটি NHibernate প্যাকেজটি আপনার প্রোজেক্টে যুক্ত করবে।
2. অন্যান্য প্রয়োজনীয় প্যাকেজ ইনস্টল করা
NHibernate ব্যবহার করতে হলে কিছু অতিরিক্ত প্যাকেজ ইনস্টল করা প্রয়োজন হতে পারে, যেমন NHibernate.Caches.SysCache, NHibernate.Linq, NHibernate.Driver, এবং NHibernate.Dialect। এগুলি ডেটাবেস এবং ক্যাশিং ব্যবস্থাপনা সমর্থন করে।
ক্যাশিং প্যাকেজ ইনস্টল করা
যদি আপনি NHibernate এর দ্বিতীয় স্তরের ক্যাশিং ব্যবহার করতে চান, তবে আপনাকে NHibernate.Caches.SysCache প্যাকেজটি ইনস্টল করতে হবে। এটি ক্যাশিংয়ের জন্য ব্যবহৃত হয়:
Install-Package NHibernate.Caches.SysCache
LINQ সাপোর্ট ইনস্টল করা
NHibernate ব্যবহার করে LINQ কুয়েরি চালানোর জন্য NHibernate.Linq প্যাকেজটি ইনস্টল করতে হবে:
Install-Package NHibernate.Linq
SQL Server ড্রাইভার এবং ডায়ালেক্ট ইনস্টল করা
NHibernate এর সাথে SQL Server ব্যবহার করতে NHibernate.Driver.SqlClientDriver এবং NHibernate.Dialect.MsSql2008Dialect প্যাকেজ দুটি ইনস্টল করা প্রয়োজন:
Install-Package NHibernate.Driver.SqlClientDriver
Install-Package NHibernate.Dialect.MsSql2008Dialect
এটি SQL Server ড্রাইভার এবং ডায়ালেক্ট সেট করবে, যা NHibernate কে SQL Server ডেটাবেসে যোগাযোগ করতে সহায়তা করবে।
3. NHibernate এর কনফিগারেশন
প্যাকেজ ইনস্টল করার পর, আপনাকে NHibernate কনফিগারেশন ফাইল (যেমন hibernate.cfg.xml) তৈরি করতে হবে, যা ডেটাবেস সংযোগ এবং ম্যাপিং কনফিগারেশন ধারণ করবে। এই ফাইলটি আপনার ডেটাবেস সংযোগের সমস্ত তথ্য ধারণ করবে।
hibernate.cfg.xml ফাইলটি নিচের মতো দেখাতে পারে:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- ডেটাবেস কানেকশন ড্রাইভার -->
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<!-- কানেকশন স্ট্রিং -->
<property name="hibernate.connection.connection_string">Server=yourserver;Database=yourdb;Integrated Security=True;</property>
<!-- SQL ডায়ালেক্ট -->
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!-- SQL লোগিং -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- ডেটাবেস স্কিমা আপডেট পদ্ধতি -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ক্যাশিং -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<!-- ম্যাপিং ফাইলের রেফারেন্স -->
<mapping assembly="YourAssemblyName"/>
</session-factory>
</hibernate-configuration>
এই কনফিগারেশন ফাইলে আপনার ডেটাবেস কানেকশন, ডায়ালেক্ট, ক্যাশিং এবং অন্যান্য সেটিংস নির্ধারণ করা হয়।
4. NHibernate সেটআপ এবং কনফিগারেশন প্রক্রিয়া সম্পন্ন করা
- প্যাকেজ ইনস্টল: NuGet Package Manager বা .NET CLI ব্যবহার করে NHibernate এবং প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন।
- hibernate.cfg.xml ফাইল তৈরি: ডেটাবেস কনফিগারেশন এবং ম্যাপিং সিস্টেমের জন্য XML কনফিগারেশন ফাইল তৈরি করুন।
- সেশন ফ্যাক্টরি কনফিগার: কনফিগারেশন ফাইল থেকে সেশন ফ্যাক্টরি তৈরি করুন।
- ট্রানজেকশন এবং সেশন ব্যবহার: ডেটাবেস অপারেশন করতে সেশন এবং ট্রানজেকশন তৈরি করুন।
এখন, আপনি আপনার NHibernate সেটআপ সম্পন্ন করেছেন এবং এটি আপনার ডেটাবেসের সাথে যোগাযোগ স্থাপন করতে প্রস্তুত।
NHibernate কনফিগারেশন ফাইল hibernate.cfg.xml একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা NHibernate এর কার্যকারিতা সঠিকভাবে কনফিগার করে। এই ফাইলটি ডেটাবেসের সাথে সংযোগ স্থাপন এবং ORM কার্যক্রম পরিচালনার জন্য প্রয়োজনীয় সমস্ত সেটিংস ধারণ করে।
এই ফাইলটি ডেটাবেস কানেকশন স্ট্রিং, ড্রাইভার, ডায়ালেক্ট, ক্যাশিং, এবং অন্যান্য NHibernate কনফিগারেশন প্যারামিটার সেট করে। নিচে একটি উদাহরণ দেওয়া হলো, যার মাধ্যমে আপনি একটি hibernate.cfg.xml ফাইল তৈরি করতে পারেন।
1. hibernate.cfg.xml ফাইলের মৌলিক গঠন
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- ডেটাবেস কানেকশন ড্রাইভার -->
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<!-- ডেটাবেস কানেকশন স্ট্রিং (এটি আপনার ডেটাবেসের সাথে সংযোগ স্থাপন করবে) -->
<property name="hibernate.connection.connection_string">Server=yourserver;Database=yourdb;Integrated Security=True;</property>
<!-- SQL ডায়ালেক্ট (ডেটাবেসে SQL কীভাবে লেখা হবে তা নির্ধারণ করে) -->
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!-- SQL কোড কনসোল বা লোগে দেখানোর জন্য, ডেভেলপারদের সহায়তার জন্য -->
<property name="hibernate.show_sql">true</property>
<!-- SQL কোড ফরম্যাট করার জন্য -->
<property name="hibernate.format_sql">true</property>
<!-- ডেটাবেস স্কিমার আপডেট পদ্ধতি নির্ধারণ -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- দ্বিতীয় স্তরের ক্যাশিং সক্রিয় করা -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<!-- ক্যাশিং কনফিগারেশন -->
<property name="hibernate.cache.region.factory_class">NHibernate.Caches.SysCache.SysCacheRegionFactory, NHibernate.Caches.SysCache</property>
<!-- মডেল ম্যাপিং ফাইল (এই অংশে আপনার ORM মডেল ক্লাসের জন্য ম্যাপিং ফাইল যুক্ত করবেন) -->
<mapping assembly="YourAssemblyName"/>
<!-- আরও কিছু অতিরিক্ত কনফিগারেশন (যেমন লেজি লোডিং, ট্রানজেকশন পরিচালনা ইত্যাদি) -->
</session-factory>
</hibernate-configuration>
2. প্রধান কনফিগারেশন প্যারামিটার
hibernate.connection.driver_class
এই প্রপার্টিটি ডেটাবেস ড্রাইভার শ্রেণী নির্ধারণ করে, যা NHibernate কে ডেটাবেসের সাথে যোগাযোগ করতে সহায়তা করে। NHibernate.Driver.SqlClientDriver সাধারণত SQL Server এর জন্য ব্যবহার করা হয়।
hibernate.connection.connection_string
এটি ডেটাবেসের সাথে সংযোগ স্থাপনের জন্য একটি কানেকশন স্ট্রিং। এটি আপনার ডেটাবেস সার্ভার, ডেটাবেস নাম, এবং ব্যবহারকারীর পরিচয় (যেমন Integrated Security বা ইউজারনেম-পাসওয়ার্ড) ধারণ করে।
<property name="hibernate.connection.connection_string">Server=myserver;Database=mydb;Integrated Security=True;</property>
hibernate.dialect
এটি ডায়ালেক্ট সেট করে, যার মাধ্যমে NHibernate SQL কোড লিখতে পারে। আপনি যদি SQL Server ব্যবহার করেন, তবে NHibernate.Dialect.MsSql2008Dialect হবে।
hibernate.show_sql
এই প্রপার্টিটি যদি true হয়, তবে NHibernate সমস্ত SQL কুয়েরি কনসোল/লগে দেখাবে, যা ডেভেলপারদের জন্য কার্যকরী হতে পারে। ডেভেলপাররা এভাবে কোডের মধ্য দিয়ে গৃহীত SQL কুয়েরি দেখতে পারেন।
<property name="hibernate.show_sql">true</property>
hibernate.format_sql
এই প্রপার্টিটি true হলে, SQL কোডটি ফরম্যাট করা হবে এবং এটি আরও পাঠযোগ্য হবে।
hibernate.hbm2ddl.auto
এটি ডেটাবেস স্কিমা ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এর মানগুলি হলো:
- update: বিদ্যমান স্কিমা আপডেট করবে।
- create: নতুন স্কিমা তৈরি করবে, পূর্ববর্তী ডেটা মুছে যাবে।
- create-drop: অ্যাপ্লিকেশন বন্ধ হলে স্কিমা ড্রপ করে ফেলবে।
- validate: ডেটাবেস স্কিমার সঠিকতা পরীক্ষা করবে, তবে কোনো পরিবর্তন করবে না।
hibernate.cache.use_second_level_cache
এই প্রপার্টিটি true হলে, NHibernate দ্বিতীয় স্তরের ক্যাশিং ব্যবহার করবে। ক্যাশিং সক্ষম করলে পারফরম্যান্সে উন্নতি ঘটবে।
hibernate.cache.provider_class
এই প্রপার্টিটি ক্যাশিং সিস্টেম নির্ধারণ করে। উদাহরণস্বরূপ, NHibernate.Caches.SysCache.SysCacheProvider সিস্টেমে ক্যাশিং ব্যবস্থাপনা পরিচালনা করবে।
mapping assembly="YourAssemblyName"
এটি আপনার assembly বা namespace নির্দেশ করে, যেখানে আপনার Entity বা মডেল ক্লাসগুলো রয়েছে। NHibernate এই ক্লাসগুলোকে মডেল হিসেবে ব্যবহার করবে।
3. hibernate.cfg.xml ফাইলের অবস্থান
hibernate.cfg.xml ফাইলটি সাধারণত প্রোজেক্টের bin বা App_Data ফোল্ডারে রাখা হয়। যদি আপনি ASP.NET Core বা অন্য কোনও .NET ফ্রেমওয়ার্কে কাজ করেন, তবে এটি wwwroot বা প্রোজেক্টের রুট ফোল্ডারে থাকতে পারে।
আপনার প্রোজেক্টের কনফিগারেশন ফাইলটি নিশ্চিতভাবে hibernate.cfg.xml নামে এবং সঠিক ফোল্ডারে থাকা উচিত, যাতে NHibernate সেটি খুঁজে পেতে পারে।
4. ব্যবহারিক উদাহরণ
ধরা যাক, আপনার একটি Employee ক্লাস আছে এবং আপনি এটি ডেটাবেসে সেভ করতে চান। আপনি hibernate.cfg.xml ফাইলটি ঠিকভাবে কনফিগার করার পর, NHibernate এর মাধ্যমে ডেটাবেস অপারেশন শুরু করতে পারবেন। আপনি একটি সেশন তৈরি করে এবং তার মাধ্যমে ডেটাবেস অপারেশন যেমন Save, Update, Delete চালাতে পারবেন।
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
try
{
var employee = new Employee { Name = "John", Age = 30 };
session.Save(employee);
transaction.Commit(); // ট্রানজেকশন কমপ্লিট
}
catch (Exception)
{
transaction.Rollback(); // রোলব্যাক
}
}
}
এইভাবে, NHibernate কনফিগারেশন ফাইল তৈরি করে, আপনি সহজে ডেটাবেসের সাথে সংযোগ স্থাপন করতে এবং ORM কার্যক্রম পরিচালনা করতে পারবেন।
NHibernate এর SessionFactory এবং Session দুটি গুরুত্বপূর্ণ উপাদান। SessionFactory হল সেই অবজেক্ট যা NHibernate এর সাথে ডেটাবেসের যোগাযোগ পরিচালনা করে এবং Session হল একটি কন্টেক্সট, যা নির্দিষ্ট একটি ডেটাবেস ট্রানজেকশনের সাথে সম্পর্কিত। এই দুটি উপাদান সঠিকভাবে কনফিগার করা হলে, আপনি NHibernate ব্যবহার করে ডেটাবেসের সঙ্গে কার্যকরভাবে যোগাযোগ করতে পারবেন।
1. SessionFactory কনফিগার করা
SessionFactory একবার তৈরি হলে, এটি বিভিন্ন সেশন তৈরি করতে ব্যবহৃত হয় এবং এটি প্রোগ্রামের গ্লোবাল অ্যাক্সেস পয়েন্ট হিসেবে কাজ করে। এটি কনফিগারেশন ফাইল থেকে কনফিগারেশন তথ্য নিয়ে সেশন তৈরি করতে সহায়তা করে।
প্রথমে, hibernate.cfg.xml ফাইলটি সঠিকভাবে কনফিগার করতে হবে (যা আমরা আগেই আলোচনা করেছি)। তারপরে, সেশন ফ্যাক্টরি কনফিগার করা হবে।
using NHibernate;
using NHibernate.Cfg;
public class NHibernateHelper
{
private static ISessionFactory sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure(); // hibernate.cfg.xml ফাইল লোড হবে
sessionFactory = configuration.BuildSessionFactory(); // সেশন ফ্যাক্টরি তৈরি
}
return sessionFactory;
}
}
}
এখানে NHibernateHelper ক্লাসটি সেশন ফ্যাক্টরি তৈরি করার দায়িত্বে আছে। Configure() মেথডটি hibernate.cfg.xml ফাইলটি লোড করে, এবং BuildSessionFactory() সেশন ফ্যাক্টরি তৈরি করে। একবার সেশন ফ্যাক্টরি তৈরি হয়ে গেলে, এটি বিভিন্ন সেশন তৈরি করতে সহায়তা করবে।
2. Session কনফিগার করা
NHibernate এর Session একটি ডেটাবেস সেশন, যা কার্যকরভাবে ডেটাবেস অপারেশন সম্পাদন করে। একটি Session তৈরি করার পর, এটি বিভিন্ন কার্যক্রম যেমন রিড, ক্রিয়েট, আপডেট, ডিলিট ইত্যাদি পরিচালনা করতে ব্যবহৃত হয়।
Session ব্যবহারের জন্য নিম্নলিখিত কোড ব্যবহার করা যেতে পারে:
using NHibernate;
using NHibernate.Cfg;
using System;
public class SessionExample
{
public void PerformDatabaseOperations()
{
// সেশন ফ্যাক্টরি তৈরি
using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
{
// ট্রানজেকশন শুরু
using (ITransaction transaction = session.BeginTransaction())
{
try
{
// ডেটা সেভ করা
var employee = new Employee { Name = "John Doe", Age = 30 };
session.Save(employee);
// ট্রানজেকশন কমিট করা
transaction.Commit();
}
catch (Exception)
{
// কোনো সমস্যা হলে ট্রানজেকশন রোলব্যাক করা
transaction.Rollback();
throw;
}
}
}
}
}
এখানে:
- OpenSession() মেথডটি একটি নতুন সেশন তৈরি করে।
- BeginTransaction() মেথডটি একটি ট্রানজেকশন শুরু করে, যাতে আপনি একাধিক ডেটাবেস অপারেশন একত্রে করতে পারেন।
- transaction.Commit() ট্রানজেকশন সফলভাবে শেষ হলে, সমস্ত পরিবর্তন ডেটাবেসে সেভ হবে।
- যদি কোনো সমস্যা হয়, তবে transaction.Rollback() ব্যবহার করে সমস্ত পরিবর্তন ফিরিয়ে নেওয়া হয়।
3. Session এবং Transaction ব্যবস্থাপনা
NHibernate এর Session এবং Transaction ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি ডেটাবেসে অবস্থা পরিবর্তন করতে এবং একাধিক অপারেশন অ্যাটমিকভাবে পরিচালনা করতে সহায়তা করে।
Session এবং Transaction ব্যবস্থাপনার জন্য কিছু গুরুত্বপূর্ণ পয়েন্ট:
- Session একটি কনটেক্সট যা একাধিক ডেটাবেস অপারেশনকে সমন্বিত করে। এটি কেবলমাত্র এক সেশন ফ্যাক্টরির মাধ্যমে তৈরি করা হয়।
- Transaction দিয়ে আপনি একাধিক ডেটাবেস অপারেশন একত্রিত করতে পারেন। যদি কোনো সমস্যা হয়, তবে ট্রানজেকশন রোলব্যাক করা যায়, যা সমস্ত পরিবর্তন বাতিল করে।
4. SessionFactory এবং Session এর সঠিক ব্যবহারের জন্য কিছু বেস্ট প্র্যাকটিস
- SessionFactory একবার তৈরি করুন:
- SessionFactory কে একবার তৈরি করুন এবং সার্বজনীনভাবে ব্যবহার করুন। এটি expensive অপারেশন, সুতরাং এটি একাধিকবার তৈরি করার চেয়ে একবার তৈরি করে পুনঃব্যবহার করা উচিত।
- Session এবং Transaction ব্যবহারের সময়
usingব্লক ব্যবহার করুন:usingব্লক ব্যবহারের মাধ্যমে Session এবং Transaction এক্সেস করার সময় সঠিকভাবে রিসোর্সগুলো ক্লোজ হবে।
- Session কে এক সেশন ফ্যাক্টরি থেকে তৈরি করুন:
- একাধিক সেশন তৈরি করতে হলে, একটি SessionFactory ব্যবহার করুন। এটি স্কেলেবিলিটি এবং পারফরম্যান্সের জন্য ভালো।
- অপারেশন সম্পন্ন হলে ট্রানজেকশন কমিট করুন:
- যদি সমস্ত অপারেশন সঠিকভাবে চলে, তবে ট্রানজেকশন কমিট করতে হবে। অন্যথায়, রোলব্যাক করতে হবে।
- ডেটাবেস অপারেশন ফেইল হলে সঠিক ত্রুটি সমাধান করুন:
- ডেটাবেসের কোনো অপারেশন ফেইল হলে, একটি সুনির্দিষ্ট catch ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং করা উচিত।
সারাংশ
SessionFactory এবং Session হল NHibernate এর গুরুত্বপূর্ণ উপাদান, যা ডেটাবেসের সাথে কার্যকর যোগাযোগ স্থাপন করে। সেশন ফ্যাক্টরি কনফিগারেশন ফাইল থেকে তথ্য নিয়ে সেশন তৈরি করতে সহায়তা করে এবং সেশন ব্যবহার করে ডেটাবেস অপারেশনগুলো পরিচালিত হয়। সঠিকভাবে সেশন এবং ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি ডেটাবেসের সঠিক কার্যক্রম পরিচালনা করতে পারেন।
NHibernate এর Dialect এবং Database Provider কনফিগারেশন খুবই গুরুত্বপূর্ণ, কারণ এগুলি ডেটাবেসের সাথে যোগাযোগ এবং SQL কোড তৈরি করার জন্য NHibernate কে নির্দেশনা দেয়। বিভিন্ন ডেটাবেস সার্ভারের জন্য আলাদা আলাদা Dialect ব্যবহৃত হয়, যা SQL কোড এবং কুয়েরি সম্পাদনার প্রক্রিয়া সহজ করে।
1. SQL Dialects কী?
Dialect হল একটি NHibernate এর কনফিগারেশন সেটিং যা NHibernate কে বলবে কিভাবে ডেটাবেসে SQL কোড লিখতে হবে। বিভিন্ন ডেটাবেসের SQL সিনট্যাক্সে পার্থক্য থাকে, এবং NHibernate এই পার্থক্যগুলো বুঝে SQL কোড তৈরি করে।
Dialect নির্বাচন করার সময় ডেটাবেসের ধরণ এবং ভার্সন অনুযায়ী সঠিক Dialect ব্যবহার করতে হয়। উদাহরণস্বরূপ, SQL Server এর জন্য আলাদা Dialect রয়েছে, এবং MySQL এর জন্য আলাদা Dialect।
2. Dialect কনফিগার করা
NHibernate এ Dialect কনফিগার করতে হলে hibernate.cfg.xml ফাইলে আপনাকে নিম্নলিখিত প্রপার্টি সেট করতে হবে:
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
এখানে MsSql2008Dialect SQL Server 2008 এর জন্য Dialect। যদি আপনি SQL Server এর অন্য ভার্সন ব্যবহার করেন, তবে আপনাকে সঠিক Dialect নির্বাচন করতে হবে।
3. ডেটাবেসের জন্য সাধারণ Dialects
নীচে বিভিন্ন ডেটাবেসের জন্য কিছু সাধারণ Dialect এর তালিকা দেওয়া হলো:
SQL Server
- NHibernate.Dialect.MsSql2008Dialect — SQL Server 2008
- NHibernate.Dialect.MsSql2012Dialect — SQL Server 2012
- NHibernate.Dialect.MsSql2014Dialect — SQL Server 2014
- NHibernate.Dialect.MsSql2016Dialect — SQL Server 2016
- NHibernate.Dialect.MsSqlDialect — SQL Server (সাধারণ Dialect)
MySQL
- NHibernate.Dialect.MySQLDialect — MySQL
- NHibernate.Dialect.MySQL5Dialect — MySQL 5.x
- NHibernate.Dialect.MySQL57Dialect — MySQL 5.7+
PostgreSQL
- NHibernate.Dialect.PostgreSQLDialect — PostgreSQL 9.x
- NHibernate.Dialect.PostgreSQL82Dialect — PostgreSQL 8.2+
Oracle
- NHibernate.Dialect.Oracle10gDialect — Oracle 10g
- NHibernate.Dialect.Oracle12cDialect — Oracle 12c
SQLite
- NHibernate.Dialect.SQLiteDialect — SQLite
4. Database Provider কনফিগার করা
Database Provider হল সেই কম্পোনেন্ট যা NHibernate কে ডেটাবেসের সাথে যোগাযোগ করার জন্য নির্দিষ্ট ড্রাইভার ব্যবহার করতে সহায়তা করে। এটি ড্রাইভার এবং ডেটাবেস কানেকশন পুলের মধ্যে সংযোগ স্থাপন করে। সঠিক Database Provider নির্বাচন করা গুরুত্বপূর্ণ, কারণ এটি ডেটাবেসের সংযোগ এবং কার্যক্ষমতা নির্ধারণ করে।
SQL Server এর জন্য Database Provider
SQL Server এর জন্য SQLClientDriver ব্যবহৃত হয়, যা ডেটাবেসের সাথে যোগাযোগের জন্য Microsoft SQL Server এর ড্রাইভার ব্যবহার করে।
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
MySQL এর জন্য Database Provider
MySQL এর জন্য MySqlDataDriver ব্যবহার করা হয়, যা MySQL ডেটাবেসের সাথে যোগাযোগ স্থাপন করে।
<property name="hibernate.connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
PostgreSQL এর জন্য Database Provider
PostgreSQL এর জন্য NpgsqlDriver ব্যবহার করা হয়, যা PostgreSQL ডেটাবেসের সাথে যোগাযোগ স্থাপন করে।
<property name="hibernate.connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
Oracle এর জন্য Database Provider
Oracle ডেটাবেসের জন্য OracleClientDriver ব্যবহার করা হয়।
<property name="hibernate.connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
5. hibernate.cfg.xml ফাইলে Dialect এবং Database Provider কনফিগার করা
একটি পূর্ণাঙ্গ hibernate.cfg.xml কনফিগারেশন ফাইল উদাহরণ নিচে দেওয়া হলো যেখানে Dialect এবং Database Provider কনফিগার করা হয়েছে:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- ডেটাবেস কানেকশন ড্রাইভার -->
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<!-- ডেটাবেস কানেকশন স্ট্রিং -->
<property name="hibernate.connection.connection_string">Server=yourserver;Database=yourdb;Integrated Security=True;</property>
<!-- SQL ডায়ালেক্ট -->
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!-- SQL কোড দেখানোর জন্য -->
<property name="hibernate.show_sql">true</property>
<!-- ডেটাবেস স্কিমা আপডেট পদ্ধতি -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ক্যাশিং কনফিগারেশন -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<!-- ম্যাপিং ফাইল -->
<mapping assembly="YourAssemblyName"/>
</session-factory>
</hibernate-configuration>
এই কনফিগারেশন ফাইলে:
- hibernate.connection.driver_class প্রপার্টিটি ডেটাবেস ড্রাইভার নির্ধারণ করে (এখানে SQL Server ব্যবহৃত হয়েছে)।
- hibernate.dialect প্রপার্টিটি ডেটাবেসের জন্য Dialect নির্ধারণ করে (এখানে SQL Server 2008 এর জন্য Dialect ব্যবহৃত হয়েছে)।
6. Dialects এবং Database Providers এর সংক্ষেপ
| ডেটাবেস | Dialect | Database Provider |
|---|---|---|
| SQL Server | NHibernate.Dialect.MsSql2008Dialect | NHibernate.Driver.SqlClientDriver |
| MySQL | NHibernate.Dialect.MySQL5Dialect | NHibernate.Driver.MySqlDataDriver |
| PostgreSQL | NHibernate.Dialect.PostgreSQLDialect | NHibernate.Driver.NpgsqlDriver |
| Oracle | NHibernate.Dialect.Oracle10gDialect | NHibernate.Driver.OracleClientDriver |
| SQLite | NHibernate.Dialect.SQLiteDialect | NHibernate.Driver.SQLiteDriver |
সারাংশ
NHibernate এ Dialect এবং Database Provider সঠিকভাবে কনফিগার করা অত্যন্ত গুরুত্বপূর্ণ। Dialect ডেটাবেসের SQL সিনট্যাক্স অনুযায়ী কুয়েরি তৈরি করে, এবং Database Provider ড্রাইভার ব্যবহারের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ স্থাপন করে। সঠিক Dialect এবং Database Provider নির্বাচন করতে হবে, যাতে আপনার প্রোজেক্ট ডেটাবেসের সাথে সঠিকভাবে কাজ করতে পারে।
Read more