با سلام و خسته نباشید خدمت استاد گرامی و تشکر بابت دوره خوبی که برگزار کرده اید
من یک مشکل در لود اولیه صفحه دارم که بهم خطای 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; }
سلام خدمت شما دوست عزیز
خوشحالم براتون مفید بوده
مشکل به احتمال زیاد برای سبد خرید کاربر هستش
زمانی که کاربر برای اولین بار میخواد محصول رو به سبد خودش اضافه کنه ، نیاز به یک سبد خرید هستش
چون شما از single or default استفاده کردید ، ممکنه userOpenOrder در مرحله ی اول null باشه
باید چک کنید که اگر null بود ، همون لحظه یدونه براش ساخته بشه بعد return کنید
حتی زمانی هم که کاربر سبد خرید پرداخت نشده داره بازهم null برمیگردونه و یک سبد خرید براش اضافه میکنه که userid صفر داره
در شرایط مختلف و با گزارههای مختلف تستش کردم این ارور رو برطرف نمیکنه
اگر userId شما 0 هستش ینی سیستم یه مشکلی داره
احتمالا userId شما foreignKey نشده چون مقدار صفر توی دیتابیسی که رابطه داره خطا باید بده
استاد رابطه شون رو هم با یه مایگریشن درست کردم
توی پایگاه داده هم حتی سبد خرید پر برای کاربر هست اما برش نمیگردونه
متدش رو کجا و به چه صورت فراخوانی میکنید؟
لطفا کدهاش رو بفرستید
استاد مشکلش رو حل کردم
مشکلش این بود که چون در زمان تغریف جدول Order ستون های Description و TrackingCode رو Nullable نزاشتیم و در زمان فراخوانی انتظار وجود مقداری در اون رو داره با خطا مواجه میشه که من در کد OrderService کدی گذاشتم که زمانی که اولین بار هست سبد خرید خالی ساخته میشه مقدار پیش فرض در اون ستون ها قرار بگیره
شما احتمالا از نسخه ی 6 به بعد dotnet استفاده میکنید
توی نسخه های بعد از 5 اگر یک ستون null پذیر باشه باید براش علامت سوال رو قرار بدید وگرنه به صورت پیشفرض اون رو اجباری در نظر میگیره اما در نسخه های قبل از 6 مثل نسخه ی 5 که در دوره استفاده شده باید required attribute استفاده بشه
خوشحالم مشکل حل شده
موفق باشید :)