۱۳۹۰/۱۲/۰۸

ارتقاء به NH 3.2 - قسمت دوم


پيشتر مطلبي را در مورد 18 مقاله‌اي كه اكثر حالت‌هاي Mapping موجود در NHibernate را خلاصه كرده بود، مطالعه كرديد.
يك مورد هم در اين مطلب به نظر در مقايسه با Fluent NHibernate درنظر گرفته نشده است و آن هم بحث AutoMapping است. Fluent NHibernate اين قابليت را دارد كه بر اساس تعاريف كلاس‌هاي شما و روابط بين آن‌ها به صورت خودكار نگاشت‌ها را تشكيل دهيد. يعني خودش مباحث ارتباط‌هاي يك به چند و چند به چند و غيره را در پشت صحنه به صورت خودكار توليد كند؛ بدون حتي يك سطر كدنويسي اضافي. فقط حداكثر يك سري IAutoMappingOverride و همچنين تعدادي Convention نامگذاري را هم مي‌توان جهت تنظيمات اين سيستم تمام خودكار اعمال كرد. مثلا توسط IAutoMappingOverride، يكي از خاصيت‌هاي كلاس را به صورت Unique معرفي كرد و مابقي هم به صورت خودكار توسط قابليت Autommaping نگاشت مي‌شوند. يا توسط Convention نامگذاري سفارشي خود، به Fluent NHibernate اعلام مي‌كنيم كه من علاقمندم نام مثلا كليدهاي خارجي تشكيل شده بجاي اعدادي منحصربفرد، از روش ويژه‌اي كه تعيين مي‌كنم، ساخته شوند. اينجا است كه به نظر من كار با NHibernate حتي از Entity framework هم ساده‌تر است (يا ساده‌تر شده است).
قابليت AutoMapping ياد شده، در سيستم جديد توكار Mapping by code هم وجود دارد. فقط چون جايي به صورت درست و درمان مستند نشده، همه دور خودشان مي‌چرخند! به همين جهت مثالي را در اين زمينه آماده كردم كه موارد زير را پوشش مي‌دهد:
- نحوه اعمال تنظيمات بانك اطلاعاتي با كدنويسي در NH3,2
- نحوه يكپارچه سازي اين روش جديد با كتابخانه NHibernate Validator
- استفاده از NHibernate Validator جهت تنظيم طول فيلدهاي بانك اطلاعاتي توليدي به صورت خودكار
- نحوه تعريف قراردادهاي نامگذاري ويژه (مثلا نام جداول توليد شده به صورت خودكار،‌ برخلاف نام موجوديت‌ها، جمع باشد نه مفرد)
- اضافه كردن قابليت تشخيص many-to-many به auto-mapping موجود در NH3,2 (براي تشخيص اين مورد به كمك امكانات مهياي پيش فرض NH3,2، بايد اندكي كدنويسي كرد)
- نحوه بازنويسي قراردادهاي پيش فرض auto-mapping. مثلا اگر قرار باشد همه چيز خودكار شود اما يكي از فيلدها به صورت unique معرفي شود چكار بايد كرد.
- نحوه ذخيره اطلاعات mapping كامپايل شده در فايل و سپس بارگذاري خودكار آن در حين اجراي برنامه جهت بالا بردن سرعت بارگذاري اوليه برنامه.