• 1405/07/23

خطا در کامپوننت UserOrder :

با سلام و خسته نباشید خدمت استاد گرامی و تشکر بابت دوره خوبی که برگزار کرده اید

من یک مشکل در لود اولیه صفحه دارم که بهم خطای Null  میده کد خطا همراه با جزئیات مربوطه رو براتون همینجا میزارم و ممنون میشم اگر کمکم کنید( این مشکل در قسمت 100 دوره برام پیش اومد)

SqlNullValueException: Data is Null. This method or property cannot be called on Null values.

این هم محتوای فایل OrderService که از خط var userOpenOrder  خطا میگیره و میگه داده Null وجود داره

پارامترهایی هم که در داخل برای Includeها استفاده شدن همشون Null هستن
حتی وقتی لاگین هم هستم این خطارو میگیره

public async Task<long> AddOrderForUser(long userId)
{
   var order = new Order{UserId = userId};
   await _orderRepository.AddEntity(order);
   await _orderRepository.SaveChanges();

   return order.Id;
}

public async Task<Order?> GetUserLatestOpenOrder(long userId)
{
   if(userId == 0) return null;
   if(!await _orderRepository.GetQuery().AnyAsync(s=>s.UserId==userId && !s.IsPaid))
       await AddOrderForUser(userId);

   var userOpenOrder = await _orderRepository.GetQuery()
       .Include(s=>s.OrderDetails)
       .ThenInclude(s=>s.ProductColor)
       .Include(s=>s.OrderDetails)
       .ThenInclude(s=>s.Product)
       .SingleOrDefaultAsync(s => s.UserId == userId && !s.IsPaid);

   return userOpenOrder;
}
  • 1405/07/23
  • ساعت 16:04

سلام خدمت شما دوست عزیز

خوشحالم براتون مفید بوده

مشکل به احتمال زیاد برای سبد خرید کاربر هستش

زمانی که کاربر برای اولین بار میخواد محصول رو به سبد خودش اضافه کنه ، نیاز به یک سبد خرید هستش

چون شما از single or default استفاده کردید ، ممکنه userOpenOrder در مرحله ی اول null باشه
باید چک کنید که اگر null بود ، همون لحظه یدونه براش ساخته بشه بعد return کنید


  • 1405/07/23
  • ساعت 16:12

حتی زمانی هم که کاربر سبد خرید پرداخت نشده داره بازهم null برمیگردونه و یک سبد خرید براش اضافه میکنه که userid صفر داره

در شرایط مختلف و با گزاره‌های مختلف تستش کردم این ارور رو برطرف نمیکنه


  • 1405/07/23
  • ساعت 16:14

اگر userId شما 0 هستش ینی سیستم یه مشکلی داره
احتمالا userId شما foreignKey نشده چون مقدار صفر توی دیتابیسی که رابطه داره خطا باید بده 


  • 1405/07/23
  • ساعت 17:44

استاد رابطه شون رو هم با یه مایگریشن درست کردم

توی پایگاه داده هم حتی سبد خرید پر برای کاربر هست اما برش نمیگردونه


  • 1405/07/23
  • ساعت 17:48

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


  • 1405/07/23
  • ساعت 18:05

استاد مشکلش رو حل کردم
مشکلش این بود که چون در زمان تغریف جدول Order ستون های Description  و TrackingCode رو Nullable  نزاشتیم و در زمان فراخوانی انتظار وجود مقداری در اون رو داره با خطا مواجه میشه که من در کد OrderService  کدی گذاشتم که زمانی که اولین بار هست سبد خرید خالی ساخته میشه مقدار پیش فرض در اون ستون ها قرار بگیره


  • 1405/07/23
  • ساعت 22:41

شما احتمالا از نسخه ی 6 به بعد dotnet استفاده میکنید

توی نسخه های بعد از 5 اگر یک ستون null پذیر باشه باید براش علامت سوال رو قرار بدید وگرنه به صورت پیشفرض اون رو اجباری در نظر میگیره اما در نسخه های قبل از 6 مثل نسخه ی 5 که در دوره استفاده شده باید required attribute استفاده بشه

خوشحالم مشکل حل شده

موفق باشید :)