PDA

View Full Version : خطا در زمان اجرا و استفاده از provider ای که خودم ساختم.



bahareh1368
دوشنبه 12 دی 1390, 10:05 صبح
سلام به همه دوستان عزیز.
یه پروژه تحت وب نوشتم که در آن از Entity Framework استفاده کردم.برای اینکار provider خود asp.net را حذف کردم و از provider و بانک اطلاعاتی که خودم ساخته بودم استفاده کردم.و در رویداد GetRolesForUser کد زیر رانوشتم.اما وقتی برنامه رو اجرا می کنم گاهی اوقات خطا میده که نمیتونه این Provider را باز کنه و کد زیر براش واضح نیست.و گاهی هم خطا میده که Execute Reader نمی تونه اطلاعات رو بخونه.من با Break point که برنامه رو اجرا کردم تا قبل از اینکه مقدار را در آرایه بریزه دارای مقداره اما وقتی توی Result میاد مقدارش نال است.چرا اینطوریه؟مینونه واسه این باشه که Visual Studio من باگ داره؟چون من همین برنامه رو در یه کامپیوتره دیگه تست کردم و بدون هیچ مشکلی اجرا میکنه حتی بعد از اینکه همون برنامه رو تو visual studio خودم هم تست می کنم بدون خطا اجراش میکنه.لطفا راهنماییم کنید.اینم کدش:



public override string[] GetRolesForUser(string username)
{
string[] result = (from u in DataContext.Context.Users
join r in DataContext.Context.Roles on u.RoleID equals r.RoleID
where u.Username == username
select r.RoleNameInSystem).ToArray();
return result;
}


کد بالا را زردرنگ میکنه و متن ارور اینه:



EntityExeption was unhandled by usercode
The underlying provider faild on open

raziee
چهارشنبه 14 دی 1390, 17:09 عصر
با سلام.
برای استفاده از شیء Context از این شیء باید یک Instance گرفته بشه.
علاوه بر این در کد شما از 2 Context مختلف داره استفاده میشه.
public override string[] GetRolesForUser(string username)
{
DataContext.Context db = new DataContext.Context();
string[] result = (from u in db.Users
join r in db.Roles on u.RoleID equals r.RoleID
where u.Username == username
select r.RoleNameInSystem).ToArray();
return result;
}

bahareh1368
چهارشنبه 14 دی 1390, 18:00 عصر
من برای اینکه از ENTITY FRAMEWORK استفاده کنم خودم یه کلاس بنام DataContext ساختم و داخلش این کد و نوشتم:

public class DataContext
{
public static EshopEntities Context = new EshopEntities();
}

بنابراین در هرجایی که میخوام از مدلم استفاده کنم دیگه لازم نیست ابتدا شی از این مدل بسازم فقط اسم این کلاس به همراه شی Context که از جنس آن است و ساخته شده استفاده کنم تا بتونم به تمام پراپرتی ها یا همون جداول مدلم دسترسی داشته باشم.عجیب اینه که با Breakpoint که چک می کنم r.roleNameInSystem دارای مقدار هست اما وقتی باید تو آرایه بیاد مقدارش رو نال نشون میده.باید چیکار کنم.لطفا راهنماییم کنید .

A.S.Roma
چهارشنبه 14 دی 1390, 18:12 عصر
من برای اینکه از ENTITY FRAMEWORK استفاده کنم خودم یه کلاس بنام DataContext ساختم و داخلش این کد و نوشتم:

public class DataContext
{
public static EshopEntities Context = new EshopEntities();
}

بنابراین در هرجایی که میخوام از مدلم استفاده کنم دیگه لازم نیست ابتدا شی از این مدل بسازم فقط اسم این کلاس به همراه شی Context که از جنس آن است و ساخته شده استفاده کنم تا بتونم به تمام پراپرتی ها یا همون جداول مدلم دسترسی داشته باشم.عجیب اینه که با Breakpoint که چک می کنم r.roleNameInSystem دارای مقدار هست اما وقتی باید تو آرایه بیاد مقدارش رو نال نشون میده.باید چیکار کنم.لطفا راهنماییم کنید .
فکر کنم باید Singleton بنویسید :

public class DataContext
{
public static EshopEntities context;
public static EshopEntities Context
{
get
{
if(context == null)
context = new EshopEntities();
return context;
}
}
}

bahareh1368
سه شنبه 20 دی 1390, 15:33 عصر
بازم هم همین خطا رو میده. اینم متن خطایی که میده عکسشو گذاشتم.8052880529

مهدی کرامتی
سه شنبه 20 دی 1390, 17:54 عصر
منظورش از The underlying provider faild on open این است که نمی تواند به بانک اطلاعاتی متصل شود.

bahareh1368
چهارشنبه 21 دی 1390, 14:34 عصر
منظورشو فهمیدم اما چرا؟مشکل از کجاست که نمیتونه به دیتابیسم وصل بشه.

bahareh1368
یک شنبه 25 دی 1390, 01:43 صبح
منظورشو فهمیدم اما چرا؟مشکل از کجاست که نمیتونه به دیتابیسم وصل بشه.

دوستان دلیلش رو فهمیدم و درستش کردم و گفتم بهتره همین جا بگم تا این تاپیک به نتیجه برسه و کمکی باشه برای اونایی که چنین مشکلی دارن.
پیش از این زمانی که تازه پروژه رو شروع کردم از Elmah استفاده کرده بودم و اونو در ویژوال استادیو نصب کرده بودم.ولی بعدش که ویندوزم رو عوض کردم در زمان اجرا متوجه نصب نبودن Elmah نشده بودم

Mostafa_Dindar
یک شنبه 25 دی 1390, 02:47 صبح
دوستان دلیلش رو فهمیدم و درستش کردم و گفتم بهتره همین جا بگم تا این تاپیک به نتیجه برسه و کمکی باشه برای اونایی که چنین مشکلی دارن.
پیش از این زمانی که تازه پروژه رو شروع کردم از Elmah استفاده کرده بودم و اونو در ویژوال استادیو نصب کرده بودم.ولی بعدش که ویندوزم رو عوض کردم در زمان اجرا متوجه نصب نبودن Elmah نشده بودم

من متوجه ربط Elmah با خطا نشدم . ولی در هر صورت بهتره که ApplicationName رو هم چک کنید که یکسان باشه , در غیر اینصورت این Provider تنها در یک سامانه کار میکنه .

bahareh1368
یک شنبه 25 دی 1390, 11:34 صبح
همه چیز درست بود.من همه رو چک کردم و مشکلی نداشت. اما وقتی دوباره Elmah on MSSQL Server Compact رو از طریق Nuget نصب کردم مشکلم حل شد.می دونم که elmah یک ماژول رایگان و سورس باز برای لاگ کردن خطاهای مدیریت نشده برنامه های Asp.Net است. یعنی شما فکر می کنید این مسئله بی ربط با مشکل برنامه من بوده؟