PDA

View Full Version : سوال: برنامه نویسی 3 لایه



mohsenns5
دوشنبه 29 فروردین 1390, 16:14 عصر
در لایه DAL داریم: (ClsProvince یک کلاسه که در لایه DAL موجود میباشد)



public List<ClsProvince> GetAllProvince()
{
var query = from sp in _Context.Provinces
orderby sp.ProvinceName
select sp;
var ProvinceCollection = query.ToList();

return ProvinceCollection;
}


و در لایه BLL داریم:(ClsProvince همون کلاسیه که تو DAL قرار داره)




public List<ClsProvince> GetAllProvinces()
{
ClsProvince ClsProvinceObj = new ClsProvince();
return ClsProvinceObj.GetAllProvince();
}





حال من میخوام در لایه UI از متد لایه BLL استفاده کنم:


dataGrid1.DataSource=GetAllProvinces();


اما یه مشکلی که هست اینه که UI به DAL دسترسی نداره و میگه که خروجی متد GetAllProvinces(); که یک لیست از نوع کلاس ClsProvince که در DAL قرار داره ، برای UI قابل تشخیص نیست

لطفا راهنمایی بفرمایید به چه صورت ین مشکل حل خواهد شد؟

aserfg
سه شنبه 30 فروردین 1390, 07:31 صبح
دوست عزیز دیتا سورس باید شیئی از خانواده دیتا سورسها مانند دیتا تیبل یا دیتاست باشه در حالی که متد GetAllProvinces()
یک لیست رو بر می گردونه .

mohsenns5
سه شنبه 30 فروردین 1390, 08:44 صبح
فرمایش شما درست، آیا در Linq این مطلب صدق میکند؟ و یا نمی توان در DAL متدهایی استفاده کنیم که نوعی از کلاس DALبرگردوند؟

tavakolian
سه شنبه 30 فروردین 1390, 09:03 صبح
سلام
دوست عزیز به این لینک هم یه سر بزن

http://how2learnasp.net/article.aspx?code=e80fcb7a-9483-4358-8b1d-d88cc6ad422f

Saber_Fatholahi
سه شنبه 30 فروردین 1390, 09:43 صبح
سلامدوست من شما وقتی ClsProvince را توی لایه دیتا تعریف کردی خوب معلومه که توی لایه نمایش اوو نمی شناسهیا باید لایه دیتا به عنوان رفرنش به لایه نمایش اضافه کنییا توی لایه BLL یه کلاس دیگه واسه این کار تعریف کنیموفق باشی

aserfg
سه شنبه 30 فروردین 1390, 10:52 صبح
فرمایش شما درست، آیا در Linq این مطلب صدق میکند؟ و یا نمی توان در DAL متدهایی استفاده کنیم که نوعی از کلاس DALبرگردوند؟



دوست عزیز من تا حالا با linq کار نکردم این مشکل دو حالت می تونه داشته باشه یکی همون که گفتم یعنی نوع متد تعریف شده درست نباشه که در ado.net متد ها در لایه های زیرین معمولا خروجی از نوع datatable , dataset دارن که در هنگام نسبت دادن اونا به خاصیت دیتا سورس یه کنترل نسبت دهنده مانند گرید ویو به مشکل برنخورند .
و اما فرض کنیم در Linq می شه از نوعی که شما استفاده کردی بهره برد یعنی خروجی از نوع List<ClsProvince> باشه
بنا براین تنها حالتی که می مونه معرفی نشدن کلاس مربوط به لایه bll شما در کلاس UI است . برای این کار فرض کنید متد مورد نظر شما در BLL در فضای نامی به نام MYNAMESPACEو در کلاس MYCLASS قرار داره شما باید اینطور عمل کنید :البته در صورتی که متد به صورت STATIC تعریف کرده باشید .

dataGrid1.DataSource=MYNAMESPACE.MYCLASSS.GetAllPr ovinces();

ولی با توجه به نمونه ای که گذاشتید چون STATIC نیست باید یه نمونه از کلاس مورد نظر بسازید با دستورNEW

USING MYNAMESPACE;
MYCLASS MC=NEW MYCLASS;


dataGrid1.DataSource=MC.GetAllProvinces();