سؤال: امروز NHibernate به روز شده اما Fluent NHibernate خیر! چکار باید کرد؟!Fluent NHibernate کتابخانهای است جهت رهایی برنامه نویسها از نوشتن فایلهای XML نگاشت کلاسها به جداول به همراه قابلیتهای دیگری مانند نگاشت خودکار و غیره. بنابراین این کتابخانه بدون NHibernate اصلی بدون کاربرد است. تیم توسعه آن هم با تیم اصلی NHibernate یکی نیست. عموما NHibernate به روز میشود اما Fluent NHibernate ممکن است تا دو ماه بعد از آن هم به روز نشود. در ...
اگر با SQL Server کار کرده باشید حتما با مفهوم و امکان Computed columns (فیلدهای محاسبه شده) آن آشنایی دارید. چقدر خوب میشد اگر این امکان برای سایر بانکهای اطلاعاتی که از تعریف فیلدهای محاسبه شده پشتیبانی نمیکنند، نیز مهیا میشد. زیرا یکی از اهداف مهم استفادهی صحیح از ORMs ، مستقل شدن برنامه از نوع بانک اطلاعاتی است. برای مثال امروز میخواهیم با MySQL کار کنیم، ماه بعد شاید بخواهیم یک نسخهی سبکتر مخصوص کار با SQLite را ارائه دهیم. آ ...
با کمک Fluent NHibernate میتوان نگاشتها را به دو صورت خودکار و یا دستی تعریف کرد. در حالت خودکار، روابط بین کلاسها بررسی شده و بدون نیاز به تعریف هیچگونه ویژگی (attribute) خاصی بر روی فیلدها، امکان تشخیص خودکار حالتهای کلید خارجی، روابط یک به چند، چند به چند و امثال آن وجود دارد. یا اگر نیاز باشد تا اسکریپت تولیدی جهت به روز رسانی بانک اطلاعاتی، طول خاصی را به فیلدی اعمال کند میتوان از ویژگیهای NHibernate validator استفاده کرد؛ مانند ...
عموما دو الگوی اصلی caching در برنامهها وجود دارند: cache aside و cache trough .در الگوی cache trough ، سیستم caching داخل DAL (که در اینجا همان NHibernate است)، تعبیه میشود؛ مانند سطح اول caching که پیشتر در مورد آن صحبت شد. در این حالت cache از دید سایر قسمتهای برنامه مخفی است و DAL به صورت خودکار آنرا مدیریت میکند.در الگوی cache aside ، کار مدیریت سیستم caching دستی است و خارج از NHibernate قرار میگیرد و DAL هیچگونه اطلاعی از وجود ...
این روزها هیچکدام از فناوریهای دسترسی به داده بدون امکان یکپارچگی آنها با سیستمها و روشهای متفاوت caching ، مطلوب شمرده نمیشوند. ایده اصلی caching هم به زبان ساده به این صورت است : فراهم آوردن روشهایی جهت میسر ساختن دسترسی سریعتر به دادههایی که به صورت متناوب در برنامه مورد استفاده قرار میگیرند، بجای مراجعه مستقیم به بانک اطلاعاتی و خواندن اطلاعات از دیسک سخت.یکی از تفاوتهای مهم NHibernate با اکثر ORM های موجود داشتن دو سطح متفاو ...
اگر به Entity data model wizard در VS.Net 2010 دقت کرده باشید، گزینهی "Pluralize or singularize generated object names" نیز به آن اضافه شده است:این مورد از این جهت حائز اهمیت است که عموما نام جداول در بانک اطلاعاتی، جمع است و نام کلاس متناظر ایجاد شده برای آن در کدهای برنامه بهتر است مفرد باشد. برای مثال نام جدول، Customers است و نام کلاس آن بهتر است Customer تعریف گردد. به این صورت کار کردن با آن توسط یک ORM با معناتر خواهد بود؛ زیرا زما ...
در زمان اولین بارگذاری NHibernate ، ساخت تمام نگاشتها صورت گرفته و همچنین session factory ایجاد میگردد. به همین جهت به کمک الگوی thread safe singleton نسبت به کش کردن آن در طول عمر یک برنامه استفاده میگردد.در برنامهای که در یک محیط کاری مورد استفاده قرار میگیرد این زمان اصلا مهم نیست، زیرا تنها یکبار باید انجام شود. اما به عنوان یک برنامه نویس شاید در طول روز صدها بار نیاز به باز و بسته کردن برنامه جهت آزمودن آن داشته باشیم و این مورد ...
مباحث eager fetching/loading (واکشی حریصانه) و lazy loading/fetching (واکشی در صورت نیاز، با تاخیر، تنبل) جزو نکات کلیدی کار با ORM های پیشرفته بوده و در صورت عدم اطلاع از آنها و یا استفادهی ناصحیح از هر کدام، باید منتظر از کار افتادن زود هنگام سیستم در زیر بار چند کاربر همزمان بود. به همین جهت تصور اینکه "با استفاده از ORMs دیگر از فراگیری SQL راحت شدیم!" یا اینکه "به من چه که پشت صحنه چه اتفاقی میافته!" بسی مهلک و نادرست است!در ادامه ...
زمانیکه خاصیتی به یکی از کلاسهای نگاشتهای تعریف شده اضافه میشود یا حذف میگردد، دقیقا باید این به روز رسانی در سمت بانک اطلاعاتی هم انجام شود. امکان تهیه و همچنین اعمال اسکریپت نهایی تولید database schema مهیا است، اما ممکن است به هر علتی این کار فراموش شود. اکنون سؤال این است که آیا میتوان سریع بررسی کرد که دیتابیس مورد استفاده با نگاشتهای برنامه همخوانی و تطابق دارد؟جهت پاسخ به این سؤال بهترین راه ایجاد یک کوئری Select بر اساس تمام ...
اگر مطلب "ذخیره سازی SQL تولیدی در NH3" را دنبال کرده باشید که یک مثال عملی از "NHibernate 3.0 و عدم وابستگی مستقیم به Log4Net" بود، خروجی حاصل از آن به صورت زیر است:---+ 12/29/2010 05:35:59.75 +---SQL ...---+ 12/29/2010 05:35:59.75 +---SQL ...و پس از مدتی این فایل هیچ حسی را منتقل نمیکند! یک سری SQL که لاگ شدهاند. مشخص نیست کدام متد در کدام کلاس و کدام فضای نام، سبب صدور این عبارت SQL ثبت شده، گردیده است.خوشبختانه در دات نت فریم ورک م ...