نمایش نتایج 1 تا 4 از 4

نام تاپیک: نحوه Async کردن متد Get/GetAll با خروجی IQueryable در ریپوزیتوری :

  1. #1

    نحوه Async کردن متد Get/GetAll با خروجی IQueryable در ریپوزیتوری :

    سلام
    درود. در صورتیکه متد Get ما بازگشتی از نوع IQueryable داشته باشد (به دلیل واکشی مناسب اطلاعات از دیتا بیس) چگونه میتوان آنرا Async کرد؟؟



    public IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = null)
    {
    IQueryable<TEntity> query = _dbSet;
    if (filter != null)
    {
    query = query.Where(filter);
    }
    if (orderBy != null)
    {
    query = orderBy(query);
    }
    if (includeProperties != null)
    {
    foreach (var includeProperty in includeProperties.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
    query = query.Include(includeProperty);
    }
    }
    return query;
    }


    چون برای Async شدن باید به .ToListAsync تبدیل شود که در آن صورت دیگر Iqueryable نخواهد بود و کل دیتا از دیتا بیس فراخوانی میشود. و در صورت عدم استفاده از Tolist نمیدونم چطوری میشه درخواستهای Get را به صورت Async اجرا کرد.

  2. #2
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: نحوه Async کردن متد Get/GetAll با خروجی IQueryable در ریپوزیتوری :

    به هیچ دلیل مورد نیاز نیست که یک IQueryable تبدیل به صورت یک Async باشد
    چون هیچ درخواستی به سرور ندارد
    تبدییل به متد های Async هنگامی است که بخواهیم یک درخواست ارسال کنیم یا یک پردازش یا درخواستی به دیتابیس صورت گیرد

  3. #3

    نقل قول: نحوه Async کردن متد Get/GetAll با خروجی IQueryable در ریپوزیتوری :

    درود. ممنون که جواب دادید.

    راستش حرفتون را درست نمیفهمم.
    مثلا ما موقع Add کردن اون را به AddAsync تبدیل میکنیم. قابل فهمه
    اما IQueryable در مرحله اول درون Repository خب هیچ درخواستی به سرور ندارد ، درست. اما بعدش که من توی یک کنترولر اون را صدا میزنم مانند زیر :
    public async Task<IActionResult> Index()        {
    IEnumerable<Product> productList =_unitOfWork.productRepository.Get();
    return View();

    }



    الان این درخواست داره اطلاعات را واکشی میکنه دیگه، آیا این کار/ درخواست حساب نمیشه که بشه اون را به صورت Async انجام داد؟؟ یعنی نیازی نیست من هیچ کاری انجام بدم؟؟

  4. #4
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: نحوه Async کردن متد Get/GetAll با خروجی IQueryable در ریپوزیتوری :

    ببینید دوست من IQueryable فقط یک عبارت هست و تا زمانیکه به tolist تبدیل نشود به سمت دیتابیس واکشی ندارد
    هیچ وقت متدهاتون از نوع IQueryable نسازید مانند مثال خودتون , چون نشتی دارند و به leaky abstraction معروف هستند . یعنی اینکه انتهای آن بسته نشده و باز هست و به راحتی میتوان از روی آن به سایر جداول دیگر دسترسی داشت.
    IQueryable را فقط درون متدی بکار ببرید که انتهایش به ToList یا ToListAsync ختم شود تا تبدیل به SQL شده و سپس بر روی بانک اطلاعاتی اجرا شود.
    البته این متد خودتون رو میتونید درون یک متدی دیگر بجز IActionResult که در معرض کاربر هست استفاده کنید
    پس نتیجه این شد که ازمتدی که ToListAsync داشته باشه در ActionResult استفاده کنید نه یک IQueryable خام و قابل تحریف و یا هک

تاپیک های مشابه

  1. سوال: الگوی واحد کار ، کدفرست و ریپوزیتوری
    نوشته شده توسط Dream8 در بخش ASP.NET MVC
    پاسخ: 10
    آخرین پست: شنبه 17 فروردین 1398, 08:08 صبح
  2. سوال: async کردن چند IQueryable در LINQ
    نوشته شده توسط nunegandom در بخش ASP.NET MVC
    پاسخ: 3
    آخرین پست: شنبه 13 مرداد 1397, 22:43 عصر
  3. ریپوزیتوری اندروید استودیو
    نوشته شده توسط omidamiry در بخش Android Studio
    پاسخ: 0
    آخرین پست: سه شنبه 10 مرداد 1396, 21:52 عصر
  4. join کردن دو ریپوزیتوری با هم
    نوشته شده توسط sara_t در بخش ASP.NET MVC
    پاسخ: 1
    آخرین پست: دوشنبه 22 آذر 1395, 08:32 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •