درست اجرا نشدن یک StoreProcedure در EF

by MDP 8. July 2011 05:59

حتمی برای شما هم اتفاق افتاده که بخشی از محاسبات و یا Logic برنامه رو به پایگاه داده واگذار کنید.مثلا قراره شما تعداد 1 ملیون رکورد که شامل اعداد تصادفی غیر تکراری هست رو به دیتابیس اضافه کنید.

بدترین راه ولی در عوض ساده ترین راه استفاده از یک حلقه For یا هرچیز دیگه ای سمت Client هست.لازم نیست توضیح بدم که این کار یعنی حدود 1 ملیون بار اتصال به پایگاه داده !

راه دوم ، استفاده از StoreProcedure هاست.در این حالت شما دیگه لازم نیست که 1 ملیون بار به پایگاه داده وصل بشید.فقط کافیه که با بار اول اتصال درخواست اجرا شدن اون SP رو باپارامتر های مورد نظر بدید.

همون طوری که میدونید EF به شما اجازه میده علاوه بر Table ها( که به صورت Entity در برنامه Map می شن) SP  و UDF های خودتون هم به EF بدید و خیلی راحت از اونا استفاده کنید.

البته مورد استفاده UDF ها و SP ها و روش معرفی اونها به EF خودش داستانی داره که از بحث الان خارجه !

فرض کنید شما SP مورد نظر ( اضافه کردن 1 ملیون رکورد ) رو نوشتید و به EF معرفی کردید.

شما حتمی مثل من این کار رو انجام میدید :

 

void DoWork()
{
   TestEntities fn = new TestEntities();
   fn.InsertOneMil();
}
 

و اجرا !

برنامه بعد از مدتی متوقف میشه و بدون هیچ خروجی خاصی مبنی بر اتمام کار آماده دریافت فرمان بعدی میشه.مشکل کجاست؟

سادست، EF برای اجرای فرامین مثل Connection های دستی دارای یک Timeout هست(البته این مورد هم مشخصه که EF بر پایه ADO.Net هست، یعنی یک لایه روی Connection و Command ! ). وقتی SP شما درحال اجرا شدن هست،بر اساس قدرت سیستم شما و شرایط دیگه ای مثل : سرت شبکه ( اگه دیتابیس روی شبکه باشه ) و … زمانی رو میگیره که بیشتر از حد معمول EF هست.

برای رفع این مشکل فقط کافیه که به صورت دستی این مقدار رو عوض کنید.

برای تغییر این مقدار دو راه پیش رو دارید :

1 – تغییر تعریف پیشفرض در خود Model

2 – تغییر در مواقع لزوم.

هر روش کارایی خودش رو داره که من هر دو روش رو اینجا میگم.

برای روش اول شما باید Source مدل رو باز کنید و مقدار CommandTimeout رو دستی عوض کنید :

1

حالا فقط کافیه که در Constructors اصلی خود Context مقدار جدید رو اعمال کنید :

 
public TestEntities() : base("name=TestEntities", "TestEntities")
     {
         this.ContextOptions.LazyLoadingEnabled = true;
         this.CommandTimeout = 999999;
         OnContextCreated();
     }
 

این روش وقتی کارایی داره که شما هرکجا که از EF توی برنامتون استفاده می کنید نیاز به Timeout بالا دارید و نمیخواید که هر دفعه این مقدار رو Set کنید.این روش پیشنهاد خوبی نیست.چون خیلی از امکانات رو از دست میدید.

روش دوم منطقی تر از روش اول هست.شما کافیه هرکجا که خواستید یعدر از ساختن یک نمونه از Context مقدار CommantTimeout رو ست کنید:

TestEntities fn = new TestEntities();
fn.CommandTimeout = 999999;

Tags: ,

.Net

چگونه Twitter را به FaceBook متصل کنیم

by MDP 8. July 2011 03:55

شاید برای شما هم جالب باشه که بعضی افراد توئیت هاشون توی فیسبوکشون گذاشته هست.اگر دوست دارید شما هم این کار رو بکنید مراحل زیر رو طی کنید :

  1. اول از همه به این آدرس برید
  2. فیسبوک از شما سوالی مبنی بر اجازه دادن برنامه خارجی به اطلاعات فیسبوکتون رو می گیره.
  3. مرحله بعدی شناسوندن اکانت Twitter به فیس بوک هست که خیلی ساده و راحت انجام میشه و طبق معمول دکمه آشنای “Sign in with twitter” همراه با اون پرنده خاکستری نشون داده میشه.
  4. حالا نوبت اجازه از Twitter هست.این کار هم خیلی ساده انجام میشه.
  5. تمام ! تبریک میگم.از این به بعد تمام Tweet های شما در Twitter بلافاصله روی Wall شما در Facebook قرار میگیره.

Tags: , , , ,

Social Networks

روش انتخاب یک شرکت ، قسمت اول : عوامل اولیه.

by MDP 7. July 2011 21:23

همیشه برای انتخاب یک شرکت مناسب برای کار یک سری شرایط مهمی وجود داره که باید بررسی بشن.

البته تمام این شرایط عقاید شخصی و تجربیات این 9 سال کار کردن من توی شرکت های مختلف هست.

شرکتی که قراره باهاشون قرارداد بندید از چند وجه باید بررسی کنید.این موارد رو من  به موارد اولیه و ثانویه تقسیم میکنم که شامل این موارد هست:

  1. موارد اولیه :
    1. حدود شرکت
    2. حدود شخص
  2. موارد ثانویه :
    1. محیط کاری
    2. موارد مالی
    3. همکاران
    4. برنامه

مورد اول که توی این بخش بهش می پردازم نوع شرکت هست.

شما با هر تجربه و هر مدل کاری که هستید باید این رو بدونید که شما شرایطی دارید که مثل یک فیلتر برای شما عمل میکنه.

شما با این فیلتر به خودتون نباید اجازه بدید که با هر شرکتی قرارداد ببندید.

یکی از مدیران من در شرکت شماران ، مهندس فضلعلی ، همیشه حرف خوبی می زد.میگفت :

وقتی به حدی از تجربه و کارایی میرسی ، تعداد شرکت هایی که به اندازه تجربه شما و یا بیشتر باشن از تعداد انگشتان دست هم کمتر میشن.چون توی بیشتر شرکت های ایرانی 90% کار فقط Insert ، update و Delete هست.شما با چیزی درگیر نمیشید که لازم باشه بیشتر از این حد رو بلد باشید.

البته به نظر شخص من این مشکل در حال حل شدن هست و شرکت های خوبی دارن شکل میگیرن با قدرت مدیران تولید و مدیران فنی خوبی که دارن در حال پیشرفت سطح علمی خودشون هستند.که مشکل فوق رو حل می کنن.

ولی در کل چیزی که خیلی مهمه اینه که در مرحله اول شما حد خودتون رو بشناسید.باید بدونید که شما کجایید و شرکت مورد نظرتون کجاست.با این فیلتر واقعا می تونید یه حدودی برای شرکت های که می تونید حتی براشون رزومه بفرستید پیدا کنید.

البته همیشه اینطور نیست که شرکت ها در حد شما نباشن.شاید شما در حد اون شرکت نباشید.

مورد حد و حدود شما همیشه به شما کمک می کنه که محیطی رو پیدا کنید که از نظر روحی و روانی براتون مناسب باشه و نه شما رو خسته کنه از سطح کار و نه زیاد سنگین که باعث بشه شما نتونید کار رو تموم کنید.

 

Tags: , , , ,

Work

My Groups

Poll

از چه پلتفرمی برای توسعه استفاده می کنید



Show Results

Month List