Fluent NHibernate হল NHibernate-এর জন্য একটি ফ্লুয়েন্ট API যা আপনাকে একটি এলিগেন্ট এবং কাস্টমাইজেবল উপায়ে NHibernate-এর কনফিগারেশন এবং মডেল ম্যাপিং করতে সহায়তা করে। এটি XML-based কনফিগারেশন ফাইলের পরিবর্তে কোড-বেসড কনফিগারেশন ব্যবহারের মাধ্যমে NHibernate ম্যাপিং আরও সহজ এবং পাঠযোগ্য করে তোলে। Fluent NHibernate ব্যবহার করলে ডেটাবেস মডেল এবং প্রোপার্টি ম্যাপিং কনফিগারেশন সহজে লেখা যায় এবং এটি দ্রুত ডেভেলপমেন্ট প্রক্রিয়ায় সহায়তা করে।
Fluent NHibernate এর সুবিধাসমূহ
- সহজ এবং পরিষ্কার কোড: XML কনফিগারেশনের তুলনায় কোড-ভিত্তিক কনফিগারেশন আরও পরিষ্কার এবং সহজ বুঝতে।
- কমপ্লেক্স মডেল ম্যাপিং: জটিল মডেল ম্যাপিং সহজে করা যায়, যেমন ইনহেরিটেন্স, কাস্টম টাইপ, এবং ক্যাশিং কনফিগারেশন।
- নিরাপত্তা: টাইপ-সেফ কোড লেখার সুযোগ দিয়ে, এটি কোডের ভুল হওয়া কমিয়ে আনে এবং রানের সময় ত্রুটি কম করে।
- উন্নত কনফিগারেশন: হাই-লেভেল কনফিগারেশন যেমন ক্যাশিং, কাস্টম টাইপ, এবং অন্যান্য এনহাইবারনেট অপশনগুলির জন্য আরও অপশন প্রোভাইড করে।
Fluent NHibernate ব্যবহার শুরু করা
Fluent NHibernate ব্যবহার করতে হলে প্রথমে কিছু নির্দিষ্ট প্যাকেজ ইনস্টল করতে হবে। নিচে ধাপগুলো দেওয়া হলো:
1. NuGet প্যাকেজ ইনস্টলেশন
Fluent NHibernate ব্যবহারের জন্য প্রথমে আপনার প্রজেক্টে নিম্নলিখিত প্যাকেজগুলি ইনস্টল করতে হবে:
Install-Package FluentNHibernate
এটি Fluent NHibernate-এর সমস্ত প্রয়োজনীয় ফাইল ইনস্টল করবে, যা আপনি পরবর্তীতে কোডের মধ্যে ব্যবহার করতে পারবেন।
2. Basic Configuration and Mapping
এখানে একটি সাধারণ উদাহরণ দেওয়া হলো যেটি দেখাবে কীভাবে Fluent NHibernate ব্যবহার করে কনফিগারেশন এবং ম্যাপিং করা যায়।
Model (Entity) Class
ধরা যাক, আমাদের একটি Product ক্লাস রয়েছে, যা একটি ডেটাবেস টেবিলকে প্রতিনিধিত্ব করছে।
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual decimal Price { get; set; }
}
Fluent NHibernate Mapping
এখন Fluent NHibernate ব্যবহার করে এই Product ক্লাসের জন্য একটি ম্যাপিং তৈরি করি।
using FluentNHibernate.Mapping;
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table("Products");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).Not.Nullable();
Map(x => x.Price).Not.Nullable();
}
}
এখানে:
ClassMap<Product>: এটিProductক্লাসের জন্য Fluent NHibernate ম্যাপিং কনফিগারেশন তৈরি করে।Table("Products"): টেবিলের নাম সেট করা হয়েছে যা ডেটাবেসেProductsহবে।Id(x => x.Id): এটিIdপ্রপার্টি কনফিগার করে এবং জানায় যে, এটি একটি আইডেন্টিটি কলাম (অটোমেটিকালি ইনক্রিমেন্ট হবে)।Map(x => x.Name):Nameপ্রপার্টি ম্যাপিং করা হয়েছে, যা ডেটাবেসেNameকলাম হবে।
3. Configuration এবং SessionFactory Setup
Fluent NHibernate ব্যবহার করতে হলে আপনাকে NHibernate-এর SessionFactory কনফিগারেশনও Fluent API এর মাধ্যমে করতে হবে। এখানে কিভাবে SessionFactory কনফিগার করা যায় তা দেখানো হচ্ছে:
using NHibernate;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using System;
public class NHibernateHelper
{
private static ISessionFactory sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)
{
sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is("your_connection_string")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())
.BuildSessionFactory();
}
return sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
এখানে:
Fluently.Configure(): এটি Fluent NHibernate কনফিগারেশন শুরু করে।MsSqlConfiguration.MsSql2008.ConnectionString(): এটি আপনার ডেটাবেসের সংযোগ স্ট্রিং কনফিগার করে। আপনি এখানে SQL Server বা অন্যান্য ডাটাবেস কনফিগার করতে পারেন।Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>()): এটি নির্দেশ করে যে,ProductMapক্লাসের ম্যাপিং যুক্ত করা হয়েছে এবং ডেটাবেস মডেল সংজ্ঞায়িত করা হয়েছে।BuildSessionFactory(): এটি একটিSessionFactoryতৈরি করে যা পরবর্তীতে ডেটাবেস অপারেশনের জন্য ব্যবহার করা হবে।
Fluent NHibernate এর অন্যান্য ফিচারসমূহ
- Inheritance Mapping: Fluent NHibernate ইনহেরিটেন্স ম্যাপিং সহজে কনফিগার করতে সাহায্য করে, যেমন
SubclassMap,JoinedSubclassMapইত্যাদি। - Custom Types: Fluent NHibernate কাস্টম টাইপ (যেমন, Enum, JSON, বা অন্য কাস্টম ডেটা টাইপ) ম্যাপিং করতে সাহায্য করে।
- Lazy Loading: এটি
lazy loadingএর জন্য খুবই উপযোগী, যাতে সেশন থেকে প্রয়োজনীয় ডেটা লোড করা হয়। - Cascading: এটি একাধিক অপারেশনের জন্য ক্যাসকেডিং কনফিগারেশন সাপোর্ট করে যেমন
Save,Delete,Updateইত্যাদি।
Fluent NHibernate এর মাধ্যমে Database Operations
Fluent NHibernate ব্যবহার করে, একবার SessionFactory কনফিগার করা হলে, আপনি ডেটাবেসের সাথে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন।
Save Operation Example
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var product = new Product { Name = "Laptop", Price = 1000 };
session.Save(product);
transaction.Commit();
}
}
এখানে:
session.Save(product): এটিproductঅবজেক্টটি ডেটাবেসে সেভ করে।transaction.Commit(): সেভ অপারেশনটি নিশ্চিত করার জন্য ট্রানজেকশন কমিট করা হচ্ছে।
সারাংশ
Fluent NHibernate একটি শক্তিশালী এবং কার্যকর উপায় যা NHibernate-এর জন্য কনফিগারেশন এবং ম্যাপিং আরও সহজ করে তোলে। এটি টাইপ-সেফ কোড লেখার সুবিধা দেয় এবং XML কনফিগারেশনের প্রয়োজনীয়তা হ্রাস করে। আপনি সহজেই ডেটাবেসের সাথে CRUD অপারেশন, ইনহেরিটেন্স, ক্যাশিং, কাস্টম টাইপস এবং আরও অনেক ফিচার ব্যবহার করতে পারেন।
Read more