NHibernate এর Schema Auto-Generation এবং Schema Update ফিচারগুলি আপনাকে ডেটাবেস স্কিমা স্বয়ংক্রিয়ভাবে তৈরি এবং আপডেট করার সুবিধা দেয়। এটি ডেভেলপারদের জন্য অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন ডেটাবেসের স্কিমা ডিজাইন বা মডেল পরিবর্তন করতে হয়, কিন্তু আপনি বারবার ম্যানুয়ালি স্কিমা আপডেট করতে চান না। NHibernate এই প্রক্রিয়াটি সহজ করে দেয়, যা আপনার ডেটাবেসের সাথে মডেলগুলির মধ্যে সিঙ্ক্রোনাইজেশন বজায় রাখে।
1. Schema Auto-Generation
Schema Auto-Generation হল একটি প্রক্রিয়া যেখানে NHibernate আপনার Entity ক্লাসের উপর ভিত্তি করে ডেটাবেস স্কিমা স্বয়ংক্রিয়ভাবে তৈরি করে। আপনি যখন hibernate.hbm2ddl.auto প্রপার্টি কনফিগার করেন, তখন NHibernate এই ফিচারটি ব্যবহার করবে।
hbm2ddl.auto Property
hibernate.hbm2ddl.auto প্রপার্টির মান পরিবর্তন করে আপনি স্কিমা জেনারেশন কনফিগার করতে পারেন। এর কিছু সাধারণ মান:
- create: ডেটাবেস স্কিমা তৈরি করবে (সর্বশেষ Entity ক্লাস অনুযায়ী)। পুরনো টেবিলগুলো মুছে নতুন স্কিমা তৈরি হবে।
- update: ডেটাবেসের স্কিমাকে Entity ক্লাস অনুযায়ী আপডেট করবে (আগের ডেটা রেখে)।
- create-drop: স্কিমা তৈরি করবে এবং অ্যাপ্লিকেশন বন্ধ হলে তা ড্রপ করবে।
- validate: শুধুমাত্র Entity ক্লাসের সাথে স্কিমার মিল পরীক্ষা করবে, কোনো পরিবর্তন করবে না।
Example of Schema Auto-Generation in hibernate.cfg.xml:
<hibernate-configuration>
<session-factory>
<!-- JDBC ড্রাইভার এবং ডেটাবেস কনফিগারেশন -->
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="hibernate.connection.connection_string">Server=localhost;Database=TestDb;Integrated Security=True</property>
<!-- Schema auto-generation -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- অন্যান্য কনফিগারেশন -->
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
এখানে, hibernate.hbm2ddl.auto="update" দিয়ে স্কিমা আপডেট করার নির্দেশ দেওয়া হয়েছে। এর মানে হলো, যখন আপনার অ্যাপ্লিকেশন রান করবে, তখন NHibernate Entity ক্লাসগুলির সাথে মেলে ডেটাবেসের স্কিমা আপডেট করবে।
2. Schema Update
Schema Update হল সেই প্রক্রিয়া যেখানে NHibernate পূর্ববর্তী স্কিমার সাথে নতুন Entity ক্লাসের স্কিমা সমন্বয় করে ডেটাবেসকে আপডেট করে। এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি আপনার Entity ক্লাসে কোনো পরিবর্তন করেছেন এবং সেগুলি ডেটাবেসে প্রতিফলিত করতে চান।
Schema Update ফিচারটি কিভাবে কাজ করে?
- Schema Update চলানোর সময়, NHibernate স্বয়ংক্রিয়ভাবে ডেটাবেস স্কিমাকে Entity মডেল অনুযায়ী আপডেট করে।
- এটি নতুন টেবিল, কলাম, অথবা কনস্ট্রেইন্ট যোগ করতে পারে, এবং পুরনো স্ট্রাকচারগুলিকে অব্যাহত রাখতে পারে।
Schema Update উদাহরণ:
public class SchemaUpdater
{
public void UpdateSchema()
{
var configuration = new Configuration();
configuration.Configure(); // hibernate.cfg.xml ফাইল থেকে কনফিগারেশন লোড
var schemaExport = new SchemaExport(configuration);
schemaExport.Execute(false, true, false); // false=Dry Run, true=Update Schema, false=Don't Drop Schema
}
}
এই কোডে, SchemaExport ক্লাস ব্যবহার করে ডেটাবেস স্কিমা আপডেট করা হয়েছে। Execute মেথডের প্রথম প্যারামিটার হলো Dry Run, দ্বিতীয় প্যারামিটার হলো Update Schema এবং তৃতীয় প্যারামিটার হলো Drop Schema। এখানে, true দেয়ার মানে হল ডেটাবেস স্কিমা আপডেট করা, কিন্তু ড্রপ করা হবে না।
3. Schema Generation with Fluent NHibernate
Fluent NHibernate এর মাধ্যমে আপনি NHibernate এর কনফিগারেশন এবং স্কিমা জেনারেশন আরও সুবিধাজনকভাবে কাস্টমাইজ করতে পারেন। এটি একটি ফ্লুয়েন্ট API প্রদান করে যা আপনাকে এনটিটি ম্যাপিং এবং স্কিমা কনফিগারেশনের উপর আরও নিয়ন্ত্রণ দেয়।
Example of Schema Auto-Generation with Fluent NHibernate:
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
// Fluent NHibernate configuration
var mapper = new ConventionModelMapper();
mapper.AddMappingsFromAssembly(Assembly.GetExecutingAssembly());
var fluentlyConfigured = Fluently.Configure(configuration)
.Mappings(m => m.FluentMappings.Add(mapper));
_sessionFactory = fluentlyConfigured.BuildSessionFactory();
}
return _sessionFactory;
}
}
}
এখানে, Fluent NHibernate এর মাধ্যমে এনটিটি ম্যাপিং এবং স্কিমা জেনারেশন করা হয়েছে। Fluent API ব্যবহার করে আপনি ম্যাপিং এবং স্কিমা কনফিগারেশন খুবই সহজে নিয়ন্ত্রণ করতে পারেন।
4. Schema Generation Best Practices
- Development Stage: ডেভেলপমেন্ট পর্যায়ে, আপনি সাধারণত
hibernate.hbm2ddl.autoকেupdateবাcreate-dropহিসাবে সেট করবেন, যাতে সহজেই স্কিমা আপডেট করা যায়। তবে production পর্যায়ে এটি পরিবর্তন করেvalidateকরা উচিত, যাতে স্বয়ংক্রিয়ভাবে স্কিমা পরিবর্তন না হয়। - Dry Run: স্কিমা আপডেট করার আগে ড্রাই রান (dry run) চালানো যেতে পারে, যাতে আপনি স্কিমা পরিবর্তনের ফলাফল দেখতে পারেন এবং ভুল কোনো কনফিগারেশন বা ডেটা মুছে ফেলা না হয়।
- Version Control: স্কিমা পরিবর্তনগুলো সাধারণত version control এ রাখা উচিত, যেন আপনি ভবিষ্যতে প্রজেক্টে যেকোনো টাইমে স্কিমা পরিবর্তন ট্র্যাক করতে পারেন।
সারাংশ
NHibernate এর Schema Auto-Generation এবং Schema Update ফিচারগুলি ডেটাবেস স্কিমার সাথে এনটিটি ক্লাসের মেলবন্ধন বজায় রাখে, যা ডেভেলপারদের জন্য সময় এবং প্রচেষ্টা সাশ্রয়ী করে। hibernate.hbm2ddl.auto কনফিগারেশন ব্যবহার করে আপনি সহজেই স্কিমা তৈরি, আপডেট, বা যাচাই করতে পারেন, যা ডেভেলপমেন্টে ও প্রোডাকশনে ব্যবহার উপযোগী।
Read more