دسته بندی ها
13:04 1399/07/29

نحوه رفع خطای The function evaluation requires all threads to run

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : WPF سی سی شارپ Entity Framework

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4232
3 نظر
mojtabahakimian : حتی من اومدم اسم هم توی کوئری برای این در نظر گرفتم و اون اسم رو بایند کردم به ستون واحد توی DataGrid SELECT *,NAMES AS 'TEST' FROM STUF_DEF JOIN TCOD_VAHEDS ON STUF_DEF.VAHED = TCOD_VAHEDS.CODE ولی بازم کار نکرد

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 02:37 1399/07/29
saedbfd : شما اول بفرمایید دلیل Full Join کردنتون چی هست ؟

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 05:51 1399/07/29
mojtabahakimian : لطفا راهنمایی بفرمایید باتشکر

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 01:06 1399/07/29
ادامه نظرات ...
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل خطای "The function evaluation requires all threads to run" در WPF با Entity Framework، باید چند نکته را در نظر بگیرید:

1. **همزمانی**: اطمینان حاصل کنید که تمام عملیات های موجود در زمینه های مختلف (threads) به درستی مدیریت می شوند. اگر تعدادی از عملیات های شما در حال انجام است و منتظر نتایج می باشند، ممکن است وضعیت قفل کردن باعث بروز این خطا شود. اطمینان حاصل کنید که کد شما به درستی با همزمانی (synchronization) کار می کند.

2. **چک کردن مقادیر موجود**: در خط کویری SQL، اطمینان حاصل کنید که مقدار `VAHED` با مقدار `CODE` در جدول `TCOD_VAHEDS` به درستی مطابقت دارد. ممکن است نتایج خالی به این دلیل باشد که هیچ تطابقی بین این دو جدول وجود ندارد. بررسی کنید که آیا این مقادیر واقعاً در پایگاه داده موجودند یا خیر.

3. **استفاده از AsEnumerable()**: برای جلوگیری از مشکلاتی که ممکن است به دلیل همزمانی در طول تحویل داده ها به DataGrid ایجاد شود، می توانید از متد AsEnumerable() استفاده کنید:

var qre = dbms.Database.SqlQuery<STUF_DEF>("SELECT * FROM STUF_DEF Full JOIN TCOD_VAHEDS ON STUF_DEF.VAHED = TCOD_VAHEDS.CODE");
dgv_Kalaha.ItemsSource = qre.AsEnumerable().ToList();

4. **استفاده از Async/Await**: در صورتی که عملیات شما زمان بر است، می توانید از الگوی async/await استفاده کنید تا تجربه کاربری بهتری ایجاد کنید و مشکلات همزمانی را کاهش دهید:

var qre = await dbms.Database.SqlQuery<STUF_DEF>("SELECT * FROM STUF_DEF Full JOIN TCOD_VAHEDS ON STUF_DEF.VAHED = TCOD_VAHEDS.CODE").ToListAsync();
dgv_Kalaha.ItemsSource = qre;

با انجام این تغییرات و بررسی موارد فوق، خطای شما باید رفع شود و داده ها به درستی در DataGrid نمایش یابند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 17:54 1399/07/29

به نظرم اگر کوئری خودتون رو به صورت زیر بنویسید بهتر هست. چون Full Join به صورت ضربدری عملیات جوین رو انجام میده و فکر نمیکنم پاسخ صحیحی به شما بده

SELECT * FROM STUF_DEF Inner JOIN TCOD_VAHEDS ON STUF_DEF.VAHED = TCOD_VAHEDS.CODE

در واقع شما می خواهید که از جدول سمت چپ کوئری که همون STUF_DEF هست اطلاعات رو نمایش بدید و از جدول سمت راست هم که TCOD_VAHEDS هست نوع واحد اندازه گیری رو نمایش بدید.

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

 

پیشنهاد

کوئری بالا رو توی Sql Server تبدیل به یک View کنید بنظرم و بعد View ی ایجاد شده رو در مدل داده ای خودتون در سی شارپ اضافه کنید.

 

Create View Vw_MyView As
SELECT * FROM STUF_DEF Inner JOIN TCOD_VAHEDS ON STUF_DEF.VAHED = TCOD_VAHEDS.CODE

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

            var qre = dbms.Database.SqlQuery<Vw_MyView>("SELECT * FROM Vw_MyView");
            dgv_Kalaha.ItemsSource = qre.ToList();
ویرایش شده در سه شنبه 29 مهر 1399 ساعت 19:19:13
به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
4 نظر
mojtabahakimian : جناب مهندس مسئله Full Join نیست , اصلا ستون واحد رو که بایند کردم خالی میزنه توی اجرا چه Inner Join Left Right Full Join مجددا بررسی بفرمایید

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 06:53 1399/07/29
mojtabahakimian : تست کردم جواب نداد

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 06:54 1399/07/29
mojtabahakimian : حل شد.

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 11:03 1399/07/30
mojtabahakimian : ♥♥سپاس گزارم♥♥

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 11:03 1399/07/30
ادامه نظرات ...
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود