‫۱۳ سال و ۸ ماه قبل، جمعه ۶ اسفند ۱۳۸۹، ساعت ۰۵:۲۱
ببینید، توابع ویژه نمایشی سی شارپ شما، یعنی سمت کلاینت. موضوع بحث فوق سمت سرور بانک اطلاعاتی است. مقادیر در سمت سرور مطابق فرمول شما تشکیل می‌شوند. به آخرین کوئری ذکر شده در مطلب فوق دقت کنید. در حال حاضر فقط SQL Server است که امکان استفاده از توابع دات نتی را هم سمت سرور میسر کرده (از نگارش 2005 به بعد). بنابراین اگر می‌خواهید توابع ویژه‌ای را در همان سمت سرور اعمال کنید که منطق آن مثلا با سی شارپ پیاده سازی شده، باید یک CLR function مخصوص اس کیوال سرور درست کنید. بعد فرمول نگاشت فوق را بر اساس این CLR function تعیین کنید و کار می‌کند. چیزی شبیه به همان آخرین کوئری تشکیل شده را خواهید داشت. خلاصه اینکه به نحوی باید این پیاده سازی دات نتی خودتون رو به سمت سرور ببرید.
اما سمت کلاینت شما هر کاری را می‌‌توانید انجام دهید. برای مثال زمان نمایش اطلاعات در WPF یا سیلورلایت از یک Converter استاندارد آن (با پیاده سازی اینترفیس IValueConverter) در حین Binding استفاده کنید. اگر با ASP.NET Webforms کار می‌کنید حین نمایش اطلاعاتی که هم اکنون در سمت کلاینت مهیا است ، مثلا جهت نمایش در یک GridView یا موارد مشابه شما خواهید داشت myFunc(Eval("field")) و شبیه به این که myFunc باید در کدبیهایند شما پیاده سازی شود. در سایر فناوری‌ها که می‌تواند شامل موارد قبل هم باشند، نهایتا شما یک لیست دریافتی از سرور را دارید، یک حلقه با LINQ یا حالت معمولی تشکیل شده و مقادیر مدل مورد نظر ویرایش می‌شوند تا جهت نمایش مناسب شوند.
تمام این‌ها در حالتی است که قصد شما فقط و فقط تغییر نحوه‌ی نمایش است. به عبارتی الان کل دیتای فیلتر شده سمت کاربر مهیا است. شما می‌خواهید به آن شکل دهید.

حالت دیگر (حالت غیر نمایشی و استفاده در کوئری‌ها):
اگر با LINQ کمی بیشتر از اطلاعات موجود در وب کار کرده باشید احتمالا به این سوال رسیده‌اید که آیا می‌شود متد سفارشی خودمان را هم حین تهیه کوئری‌هایی از این دست استفاده کنیم؟ چون فقط یک سری extension method مشخص بیشتر وجود ندارند. اگر من extension method سفارشی خودم را تهیه کردم چطور؟
این سوال دو پاسخ دارد:
- متدهای سفارشی شما حتما روی کل اطلاعات دریافتی از سرور کار می‌کنند؛ اما بهینه نیستند. چون برای مثال myFunc سی شارپ من معادل SQL ایی ندارد که بتوانم مستقیما آن‌را سمت سرور اجرا کنم. چون نهایتا LINQ to NHibernate باید به SQL یا T-SQL ترجمه شود. به همین جهت مجبورم کل اطلاعات را دریافت کنم، مثلا 100 هزار رکورد، حالا که اشیاء دات نتی من تشکیل و کامل شده، متد سفارشی LINQ خودم را بر روی این‌ها اجرا می‌کنم. این روش کار می‌کنه ولی از لحاظ کارآیی فاجعه است.
- روش دیگر: در NH 3.0 این امکان وجود دارد ... بسط پروایدر LINQ آن با صور مختلف. که اگر وقت شد یک مطلب کامل در مورد آن خواهم نوشت.
‫۱۳ سال و ۸ ماه قبل، جمعه ۶ اسفند ۱۳۸۹، ساعت ۰۰:۰۵
سلام
دقیقا مانند مثال فوق عمل کنید. یک خاصیت private set دار را همانند مثال فوق اضافه کنید، مثلا PersianDate از نوع string . سپس فرمولی را باید به آن در قسمت CustomMappings ذکر شده انتساب داد. برای اینکار از همان روش‌های مرسوم cast استفاده کنید به همراه substring تا بشود ابتدا مقدار عددی را به رشته تبدیل کرد و سپس با substring قسمت‌های مختلف را جدا کرد و نهایتا به هم چسباند. فقط باید دقت داشت که این فرمول باید یک فرمول معتبر SQL ایی باشد.
‫۱۳ سال و ۷ ماه قبل، جمعه ۱۲ فروردین ۱۳۹۰، ساعت ۰۶:۰۰
برای برنامه‌های تک کاربره شاید لزومی نداشته باشه چون هدف اصلی آن کم کردن بار سرور است
یک سری از موارد سایت عمومی است مثلا آمار سایت حالا سوال اینجا است که اگر 10 هزار نفر هم اکنون به سایت مراجعه کردند باید 10 هزار بار به بانک اطلاعاتی جهت دریافت یک سری اطلاعات با سطح دسترسی عمومی مراجعه کرد؟ اینجا است که سطح دوم کش ذکر شده معنا پیدا می‌کند
‫۱۳ سال و ۸ ماه قبل، شنبه ۱۶ بهمن ۱۳۸۹، ساعت ۱۳:۵۶
تکمیل این بحث: در یک سری از متدهای فایل global.asax عموما Context ایی وجود ندارد (دقیقا مانند برنامه‌های دسکتاپ). در این حالت از Elmah.ErrorLog.GetDefault(null).Log(new Error(ex)) استفاده کنید.
‫۱۳ سال و ۹ ماه قبل، جمعه ۸ بهمن ۱۳۸۹، ساعت ۲۰:۳۱
سلام، اون dll مخصوص NHibernate بود و باشد بهتر است. چون اسکریپت SQL را که اجرا می‌کنید در این لحظه همه چیز یکسان خواهد شد، نه چند روز دیگر با اطلاعات جدیدتر.