موقع ویرایش کاربر خطا داره
اهمیت: مهم نوع: گزارش خطا شماره نگارش: 1
با سلام
با تشکراز پروژه خوبتون
من پروژه رو اجرا کردم موقعی که روی دگمه ویرایش کاربران کلیک میکنم خطای زیر رو بهم نشون میده
 LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

 هرچی تلاش کردم متوجه نشدم که دقیقا از کجا خطا میگیره و فقط میدونم که از متد GetUserByRoles موقع Map کردنش به EditUserViewModel  ایراد می‌گیره

 public Task<EditUserViewModel> GetUserByRoles(int id)
        {
            return _users.AsNoTracking()
                    .Include(a => a.Roles)
                    .Project(_mappingEngine)
                    .To<EditUserViewModel>()
                    .FirstOrDefaultAsync(a => a.Id == id);
           
               
        }

  • #
    ‫۹ سال و ۲ ماه قبل، سه‌شنبه ۶ مرداد ۱۳۹۴، ساعت ۲۰:۳۰
    مشکل اینجاست که نوع ?DateTime  فیلدهای LastActivityDate  و BirthDay  در مدل EditUserViewModel، بصورت string تعریف شده است و برخلاف نوع DateTime در عملیات نگاشت بلا تکلیف است.
  • #
    ‫۹ سال و ۲ ماه قبل، سه‌شنبه ۶ مرداد ۱۳۹۴، ساعت ۲۳:۵۸
    بله قسمت ویرایش و حذف کاربران باقی مانده . تکمیل میکنم.
    خطا مربوط به Mapping بین ویو مدل و مدل است.البته به صورت سراسری یک  ValueConverter برای تبدیل DateTime به string معرفی کردم ولی خطای Type 'System.String' does not have a default constructor 
    داده شد.برای رفع خطا فعلا این تبدیلگر را غیر فعال کرده ام.
    • #
      ‫۹ سال و ۲ ماه قبل، چهارشنبه ۷ مرداد ۱۳۹۴، ساعت ۱۶:۵۲
      من مشکل رو فعلا با این کار رفع کردم
       CreateMap<ApplicationUser, EditUserViewModel>()
                           .ForMember(d => d.BirthDay, s => s.Ignore())
                           .ForMember(d => d.LastActivityDate, s => s.Ignore())
                           .IgnoreAllNonExisting();

      • #
        ‫۹ سال و ۲ ماه قبل، چهارشنبه ۷ مرداد ۱۳۹۴، ساعت ۱۸:۲۳
        خب این تغییر صورت مسئله است. مسئله اینه که باید تاریخ عضویت و آخرین فعالیت نمایش داده شود. نه اینکه نادیده گرفته شود!
        در کلاس  ApplicationUserManager در متد GetPagedList کد را به این صورت تغییر دهید.
            total = users.FutureCount();
                    var query =
                        users.OrderByUserName()
                            .SkipAndTake(search.PageIndex - 1, search.PageSize)
                            .Future().ToList();
                    return _mappingEngine.Map<IList<UserViewModel>>(query);
        ظاهرا توانایی ترجمه کوئری به صورت قبل وجود ندارد.
        • #
          ‫۹ سال و ۲ ماه قبل، چهارشنبه ۷ مرداد ۱۳۹۴، ساعت ۱۹:۱۰
          سخن شما درست نباید نادیده گرفته بشه ولی توی متد GetPagedList  عملیات mapping به خوبی کار می‌کنه ، موضوع موقع مپ کردن تو متد هایه که از Task استفاده شده مثل GetUserByRoles که از  FirstOrDefaultAsync  استفاده کردید اگر همین کد رو به FirstOrDefault و بدون Task بنویسید به خوبی کار میکنه
          • #
            ‫۹ سال و ۲ ماه قبل، چهارشنبه ۷ مرداد ۱۳۹۴، ساعت ۲۰:۲۶
            دلیل آنکه متد GetPagedList به خوبی کار میکرد. این بود که بنده فعلا نادیده گرفته  بودم فیلد‌های DateTime را
            ، مشکل را در کامنت فبلی گفتم خدمتتون و ربطی به متد‌های Async ندارد. پروایدر Linq توانایی ترجمه این نوع کوئری را ندارد.
            تغییرات جدید را اعمال کردم (باز هم با متد‌های Async)
            نتیجه: