مهمترین مسئلهای که در Session management در NHibernate وجود دارد، مسئله نگهداری session است. به طور معمول سعی میشود برای انجام یک کار فقط یک session باز شود نه بیشتر. اگر طی انجام همان کار مجدداً نیاز به session شد از همان session قبلی استفاده میشود نه این که یک session جدید open شود. این …
بحث NHibernate Session Management در برنامههای وب اصلاً کار سختی نیست. روتینها و نمونههای زیادی هم در مورد آن وجود دارد. اما انجام همین بحث در Winform و WCF کمی کار میبرد. یکی از بهترین روشها برای مدیریت Session در NHibernate استفاده از الگوی Unit Of Work است. تطبیق این الگو با مدل کاری وب …
فرض کنید تعدادی کلاس سیشارپ را با استفاده از Reflection.Emit در زمان اجرا (Runtime) ساختهاید. این یعنی کلاسها دینامیک بوده و هیچ سورس کدی وجود ندارد، بلکه همه چیز فقط در حافظه وجود دارد یا نهایتاً فایل dll اسمبلی آن را بتوان در دیسک ذخیره کرد. حال میخواهیم برای این کلاسهای دینامیک HBM یا همان …
از همان اولین باری که اسم Fluent NHibernate را شنیدم فکر کردم چیز جالبی نیست. نمیدانم چرا، شاید به خاطر آن که فکر میکردم انعطافپذیری را فدای راحتی کرده یا شاید هم به خاطر غرور low level. طی مدت اخیر که به دنبال راهی برای dynamic کردن entityهای NHibernate بودم خود به خود مجبور شدم …
برای Lazy Loading در NHibernate روال زیر را انجام داده بودم. lazy را برای همه mappingها true کرده بودم. در web.config هم همینطور. سپس هر جا که lazy مشکل پیدا میکرد و خطای LazyInitializationException اتفاق میافتاد، آن association یا collection را با استفاده از کلاس NHibernateUtil.Initialize پیش load میکردم تا مشکل حل شود. این راه …
بین دو Entity میتوان رابطه یک به یک برقرار کرد. یعنی به ازای یک instance (رکورد) از یکی، فقط و فقط یک instance (رکورد) در دیگری وجود داشته باشد. هر چند که NH این نوع رابطه را نشانه طراحی بد میداند، اما دو راه برای پیادهسازی آن مهیا کرده است: ۱- روش primary key associations: …
NHibernate have 2 varieties of one-to-one association, primary key associations and unique foreign key associations. Castle ActiveRecord documentation describes just first varity, primary key associations. But how about second variety, unique foreign key associations? Well, it can be implemented as follow. Please notice sample: [ActiveRecord(Lazy = true)] public class User : ActiveRecordBase { [PrimaryKey] …
یکی از معروفترین خطاهای NHibernate خطای زیر است: No row with the given identifier exists[EntityName#rec_id] به جای EntityName نام کامل entity و به جای #rec_id شماره رکورد قرار میگیرد. این خطا همان طور که پیغامش اشاره میکند وقتی به وقوع میپیوندد که NH در دیتابیس به دنبال رکورد خاصی میگشته ولی آن رکورد در دیتابیس …
به تجربه دریافتهام هر وقت که در NHibernate/Castle AR بدون هیچ دلیل واضحی مشکل Stack Overflow به وجود میآید، باید مکانیزم Dirty detection را بررسی کرد. در این مکانیزم، NH خودش objectهایی را که dirty شدهاند را پیدا کرده و آنها را update میکند. بعضی وقتها پیش میآید که update شدن یک آبجکت dirty باعث …
سالهای سال است که با محصولات مایکروسافت کار میکنم. دقیقاً از داس ۵ به این طرف. البته هیچ وقت هم با این موضوع مشکل خاصی نداشتم. هر وقت مایکروسافت داس را کنار میگذاشت و ویندوز را رو میکرد ما هم سراغ ویندوز میرفتیم، هر وقت ASP Classic را دور میانداخت ما هم همین کار را …