Stored Procedure হলো একটি প্রি-কম্পাইলড SQL কোড ব্লক, যা ডেটাবেসের ভিতরে সংরক্ষিত থাকে এবং ডেটাবেস অ্যাপ্লিকেশন থেকে পুনরায় ব্যবহার করা যায়। NHibernate ব্যবহার করে Stored Procedure এর মাধ্যমে কাস্টম SQL কোড চালানো সম্ভব। এটি ডেটাবেস অপারেশনগুলোকে আরও দ্রুত এবং সুরক্ষিত করতে সাহায্য করে, কারণ স্টোরড প্রোসিজারগুলো একবার তৈরি হওয়ার পর বারবার ব্যবহার করা যায় এবং ডেটাবেস সার্ভারের মধ্যে তা প্রি-কাম্পাইলড থাকে।
Stored Procedure ব্যবহার করা
NHibernate এ Stored Procedure ব্যবহার করার জন্য আপনি ISession এর মাধ্যমে সোজা SQL কোড এক্সিকিউট করতে পারেন অথবা Named Query হিসেবে স্টোরড প্রোসিডিউর ব্যবহার করতে পারেন। এখানে উভয়ের উদাহরণ দেওয়া হলো:
1. Direct Stored Procedure Execution
আপনি ISession এর মাধ্যমে সরাসরি Stored Procedure কল করতে পারেন।
উদাহরণস্বরূপ, একটি Stored Procedure যার নাম GetEmployeeById আছে, যা একটি নির্দিষ্ট EmployeeID দিয়ে ডেটা রিটার্ন করে:
CREATE PROCEDURE GetEmployeeById(@EmployeeID INT)
AS
BEGIN
SELECT * FROM Employees WHERE EmployeeID = @EmployeeID
END
এখন, আপনি এই স্টোরড প্রোসিডিউরটি NHibernate ব্যবহার করে কল করতে পারেন:
using (var session = sessionFactory.OpenSession())
{
var sqlQuery = session.CreateSQLQuery("EXEC GetEmployeeById :employeeId")
.SetParameter("employeeId", 1)
.AddEntity(typeof(Employee));
var employees = sqlQuery.List<Employee>();
}
এখানে:
CreateSQLQueryব্যবহার করে স্টোরড প্রোসিডিউরGetEmployeeByIdএক্সিকিউট করা হয়েছে।.SetParameter("employeeId", 1)এর মাধ্যমে প্রোসিডিউরের ইনপুট প্যারামিটার প্রদান করা হয়েছে।.AddEntity(typeof(Employee))দিয়ে স্টোরড প্রোসিডিউর থেকে রিটার্ন হওয়া ডেটাকেEmployeeঅবজেক্টে ম্যাপ করা হয়েছে।
2. Named Query ব্যবহার করে Stored Procedure কল করা
NHibernate এ আপনি Named Query ব্যবহার করে স্টোরড প্রোসিডিউর কল করতে পারেন। Named Query আপনার HQL বা SQL কোডকে আগেই ডিফাইন করে রাখে এবং পরে তার মাধ্যমে কুয়েরি বা স্টোরড প্রোসিডিউর কল করা যায়।
প্রথমে, hibernate.cfg.xml ফাইলে Named Query ডিফাইন করা হবে:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<sql-query name="GetEmployeeById">
<![CDATA[
EXEC GetEmployeeById :employeeId
]]>
</sql-query>
</hibernate-mapping>
এখানে, GetEmployeeById নামক SQL Query হিসেবে স্টোরড প্রোসিডিউরটি ডিফাইন করা হয়েছে।
এখন, C# কোডের মাধ্যমে এই Named Query কল করা যাবে:
using (var session = sessionFactory.OpenSession())
{
var query = session.GetNamedQuery("GetEmployeeById")
.SetParameter("employeeId", 1)
.List<Employee>();
}
এখানে:
GetNamedQuery("GetEmployeeById")দিয়ে Named Query কল করা হয়েছে, যা আমাদের আগেhibernate.cfg.xmlফাইলে ডিফাইন করা ছিল।.SetParameter("employeeId", 1)এর মাধ্যমে প্যারামিটার পাস করা হয়েছে এবং.List<Employee>()ব্যবহার করে রিটার্ন হওয়া ডেটাEmployeeঅবজেক্টে ম্যাপ করা হয়েছে।
3. Stored Procedure Configuration
NHibernate এ স্টোরড প্রোসিডিউরের কনফিগারেশন সাধারণত SQL কোডের মাধ্যমে পরিচালিত হয়, যেমন উপরে দেখানো হয়েছে। তবে, কিছু কেসে আপনি NHibernate Configuration ফাইলে স্টোরড প্রোসিডিউরের নাম এবং প্যারামিটার ডিফাইন করতে পারেন।
এখানে, hibernate.cfg.xml ফাইলের মাধ্যমে Named Query এবং Stored Procedure কনফিগারেশন:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<sql-query name="GetEmployeeById">
<![CDATA[
EXEC GetEmployeeById :employeeId
]]>
</sql-query>
</hibernate-mapping>
এটি একইভাবে কাজ করে যেমন উপরে Named Query এ ব্যবহার করা হয়েছে। আপনি একইভাবে Stored Procedure কনফিগার করে কোডের মাধ্যমে কুয়েরি চালাতে পারবেন।
4. Transaction Management with Stored Procedures
স্টোরড প্রোসিডিউরের সাথে কাজ করার সময় ট্রানজেকশন ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ। NHibernate এ ট্রানজেকশন ব্যবস্থাপনা session.BeginTransaction() এবং session.GetTransaction() এর মাধ্যমে করা হয়।
এখানে একটি উদাহরণ দেওয়া হলো যেখানে স্টোরড প্রোসিডিউর ব্যবহারের পর ট্রানজেকশন পরিচালনা করা হয়েছে:
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
try
{
var sqlQuery = session.CreateSQLQuery("EXEC GetEmployeeById :employeeId")
.SetParameter("employeeId", 1)
.AddEntity(typeof(Employee));
var employees = sqlQuery.List<Employee>();
transaction.Commit(); // Commit the transaction
}
catch (Exception)
{
transaction.Rollback(); // Rollback in case of error
throw;
}
}
}
এখানে:
transaction.Commit()এর মাধ্যমে টランজেকশন কমিট করা হয়েছে।transaction.Rollback()যদি কোনো ত্রুটি ঘটে তবে টランজেকশন রোলব্যাক করা হয়েছে।
সারাংশ
- Stored Procedures ব্যবহার করে আপনি NHibernate এর মাধ্যমে কাস্টম SQL কোড চালাতে পারেন, যা ডেটাবেসের পারফরম্যান্স বৃদ্ধি এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
- আপনি ISession বা Named Query ব্যবহার করে স্টোরড প্রোসিডিউর কল করতে পারেন।
- ট্রানজেকশন ব্যবস্থাপনা নিশ্চিত করে যে স্টোরড প্রোসিডিউর এক্সিকিউশন সঠিকভাবে সম্পন্ন হচ্ছে এবং ডেটা ত্রুটি ছাড়া ডেটাবেসে সেভ হচ্ছে।
Read more