نظرات مطالب
NoSQL ؟
تا آماده شدن مثال کاربردی; دیدن این پست خالی از لطف نیست.
مطالب
NHibernate و مدیریت خودکار تغییرات ساختار بانک اطلاعاتی

یکی از دردهای عظمایی که حین کار با بانک‌های اطلاعاتی رابطه‌ای وجود دارد، هماهنگ نبودن دیتابیس توسعه، با دیتابیس کاری است. البته ابزار‌های متعددی برای تهیه Diff بین این دو وجود دارند. ولی زمانیکه قرار باشد این کار را در چندجا هم انجام دهیم، باز هم مشکل خواهد بود.
با NHibernate می‌شود کل این مساله را فراموش کرد! می‌شود راحت خاصیتی را به کلاسی اضافه کرد و در اولین بار اجرای برنامه، خود NHibernate هماهنگ سازی‌ها را انجام دهد. فیلد اضافه کند. جدول اضافه کند. روابط مرتبط را اضافه کند. یعنی تا این حد که ما فقط فایل اجرایی برنامه را به روز کنیم، کافی باشد. البته در لابلای مطالبی که تا به حال در مورد NHibernate در این سایت منتشر شده به این موضوع هم پرداخته شده و مطلب جاری، خلاصه‌ی بزرگنمایی شده آن‌ها است.

اولین قدم: آیا ساختار دیتابیس جاری، با مدل برنامه تطابق دارد؟
قبل از اینکه از NHibernate بخواهیم ساختار بانک اطلاعاتی ما را تغییر دهید، باید بدانیم که آیا واقعا نیازی به اینکار هست یا خیر؟
توضیحات بیشتر در مورد روش تشخیص در اینجا: (^)

قدم دوم: اگر ساختار دیتابیس جاری با مدل برنامه تطابق ندارد، چگونه باید آن‌را به صورت خودکار به روز کرد؟
متد زیر بر اساس Configuration ابتدایی بانک اطلاعاتی و نگاشت‌های شما، کار به روز رسانی خودکار ساختار بانک اطلاعاتی را انجام خواهد داد:

public void UpdateDatabaseSchema(NHibernate.Cfg.Configuration config)
{
var schemaUpdate = new NHibernate.Tool.hbm2ddl.SchemaUpdate(config);
schemaUpdate.Execute(script: false, doUpdate: true);
}

یک نکته را هم باید درنظر داشت. در این روش هیچ فیلد و جدولی حذف نمی‌شود و به این ترتیب، جهت امنیت بیشتر طراحی شده. اگر واقعا نیاز داشتید فیلد یا جدولی را حذف کنید باید دستی، همانند سابق اقدام کنید.

قدم سوم: چگونه و در کجا، دو قدم قبل را با برنامه یکپارچه کنیم؟
بلافاصله پس از ایجاد SessionFactory در برنامه، متد زیر را فراخوانی کنید:

public void TryValidateAndUpdateDatabaseSchema(NHibernate.Cfg.Configuration config)
{
try
{
ValidateDatabaseSchemaAgainstMappings();
}
catch
{
UpdateDatabaseSchema(config);
}
}

متد ValidateDatabaseSchemaAgainstMappings در صورت عدم تطابق مدلی با بانک اطلاعاتی، یک exception را صادر می‌کند. بنابراین در اینجا کافی است متد UpdateDatabaseSchema را در قسمت catch فراخوانی کرد.
و از این پس دیگر می‌توانید به روز رسانی ساختار بانک اطلاعاتی برنامه را فراموش کنید! فیلد اضافه کنید، کلاس اضافه کنید، تمام این‌ها در اولین بار اجرای برنامه به روز شده، به صورت خودکار به بانک اطلاعاتی اعمال خواهند شد.


نظرات مطالب
طراحی گردش کاری با استفاده از State machines - قسمت دوم
پروژه‌ی دیگری هست از همین گروه به نام mass transit. این پروژه، یک زیر شاخه‌ی ساخت گردش کاری به نام « Automatonymous » هم دارد؛ با این مستندات. به تست‌های سورس آن نگاه کنید، مثال NHibernate هم در آن لحاظ شده‌است.
نظرات مطالب
آشنایی با NHibernate - قسمت هفتم
با سلام. 
برای استفاده از NHibernate باید تمام نگاشت‌ها رو به صورت دستی انجام داد؟ یعنی مثل EF محیط Wizard وجود نداره که پس از طراحی دیتابیس این نگاشت جدول‌ها اوتوماتیک صورت بگیره ؟
نظرات مطالب
Entity Framework و آینده
هرجا صحبت از تفاوت و مزایای این دو ORM یعنی NH و EF پیش میاد، اولین تفاوت پشتیبانی NHibernate از کش لایه دوم هست.
نظرات مطالب
EF Code First #2
بله. بحث DB Migration روی همین مورد تمرکز دارد. جزئیات آن مفصل است. بسیار کاملتر است از نمونه NHibernate و طراحی مهندسی قابل توجهی دارد. شاید توضیحش نیاز به دو جلسه داشته باشد.
نظرات مطالب
مجوز WTFPL
بله. برای مثال NHibernate مجوز LGPL دارد؛ به این معنا که منعی در مورد استفاده از کتابخانه‌های باینری کامپایل شده آن در یک پروژه تجاری و سورس بسته وجود ندارد.