eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این کد کنترلر HomeController را بررسی و توضیح دهیم که هر بخش آن چه وظیفه‌ای دارد. توضیح کد کلاس HomeController کلاس: HomeController csharp public class HomeController : Controller { private readonly ILogger<HomeController> _logger; private readonly IGetSliderService _getSliderService; private readonly IGetHomePageImagesService _homePageImagesService; private readonly IProductFacad _productFacad; public HomeController(ILogger<HomeController> logger , IGetSliderService getSliderService , IGetHomePageImagesService homePageImagesService , IProductFacad productFacad) { _logger = logger; _getSliderService = getSliderService; _homePageImagesService = homePageImagesService; _productFacad = productFacad; } public IActionResult Index() { HomePageViewModel homePage = new HomePageViewModel() { Sliders = _getSliderService.Execute().Data, PageImages = _homePageImagesService.Execute().Data, Camera = _productFacad.GetProductForSiteService.Execute(Ordering.theNewest , null, 1, 6, 25).Data.Products, }; return View(homePage); } public IActionResult Privacy() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } توضیح بخش‌های مختلف کلاس: اعضای خصوصی (private) ILogger<HomeController> _logger: این عضو برای لاگ‌گیری و ثبت رویدادها استفاده می‌شود. IGetSliderService _getSliderService: این عضو برای دریافت اسلایدرهای صفحه اصلی استفاده می‌شود. IGetHomePageImagesService _homePageImagesService: این عضو برای دریافت تصاویر صفحه اصلی استفاده می‌شود. IProductFacad _productFacad: این عضو برای دریافت محصولات صفحه اصلی استفاده می‌شود. سازنده HomeController csharp public HomeController(ILogger<HomeController> logger , IGetSliderService getSliderService , IGetHomePageImagesService homePageImagesService , IProductFacad productFacad) { _logger = logger; _getSliderService = getSliderService; _homePageImagesService = homePageImagesService; _productFacad = productFacad; } این سازنده فیلدهای خصوصی را مقداردهی می‌کند: هدف: تزریق وابستگی‌ها (Dependency Injection) و فراهم کردن استفاده از سرویس‌ها و لاگ‌گیری. اکشن Index csharp public IActionResult Index() { HomePageViewModel homePage = new HomePageViewModel() { Sliders = _getSliderService.Execute().Data, PageImages = _homePageImagesService.Execute().Data, Camera = _productFacad.GetProductForSiteService.Execute(Ordering.theNewest , null, 1, 6, 25).Data.Products, }; return View(homePage); } این متد یک اکشن است که ویوی مربوط به صفحه اصلی را باز می‌کند: ایجاد ViewModel صفحه اصلی: داده‌های اسلایدرها، تصاویر صفحه اصلی و محصولات (دوربین‌ها) را از سرویس‌های مختلف دریافت می‌کند و در یک ViewModel قرار می‌دهد. بازگرداندن ویو: ViewModel صفحه اصلی را به ویو ارسال می‌کند. هدف: نمایش داده‌های صفحه اصلی به کاربر. اکشن Privacy csharp public IActionResult Privacy() { return View(); } این متد یک اکشن است که ویوی مربوط به صفحه حریم خصوصی را باز می‌کند: هدف: نمایش صفحه حریم خصوصی. اکشن Error csharp [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } این متد یک اکشن است که در صورت بروز خطا اجرا می‌شود: عدم کش‌سازی پاسخ: استفاده از ResponseCache برای جلوگیری از کش‌سازی پاسخ. ایجاد مدل خطا: ایجاد یک شیء ErrorViewModel با شناسه درخواست (RequestId). بازگرداندن ویو: بازگرداندن ویو خطا همراه با مدل خطا.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
نتیجه‌گیری این کنترلر به مدیریت صفحات اصلی سایت می‌پردازد. شامل اکشن‌هایی برای نمایش صفحه اصلی، صفحه حریم خصوصی و صفحه خطا می‌باشد. این کنترلر از سرویس‌های مختلف برای دریافت داده‌های مربوط به اسلایدرها، تصاویر صفحه اصلی و محصولات استفاده می‌کند و این داده‌ها را به ویو ارسال می‌کند تا به کاربر نمایش داده شوند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
بیایید این بخش از کد ویو Razor برای صفحه اصلی را بررسی کنیم و توضیح دهیم که هر بخش آن چه وظیفه‌ای دارد. توضیح کد ۱. بخش اسلایدر (slider-box) کد: html <div class="slider-box"> <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="" data-slide-to="0" class="active"></li> @for (int i = 1; i <= Model.Sliders.Count - 1; i++) { <li data-target="" data-slide-to="@i" ></li> } </ol> <div class="carousel-inner"> @foreach (var item in Model.Sliders) { if (_sliderCount == 1) { <div class="carousel-item active"> <a href="@item.Link"> <img src="~/@item.Src" class="d-block w-100" alt="..."> </a> </div> } else { <div class="carousel-item"> <a href="@item.Link"> <img src="~/@item.Src" class="d-block w-100" alt="..."> </a> </div> } _sliderCount++; } </div> <a class="carousel-control-prev" href="" role="button" data-slide="prev"> <span class="fa fa-angle-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="carousel-control-next" href="" role="button" data-slide="next"> <span class="fa fa-angle-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </div> توضیح: ساختار کلی اسلایدر: استفاده از کلاس‌های carousel و carousel slide برای ایجاد یک اسلایدر با استفاده از Bootstrap. carousel-indicators: نمایش نقاط نمایانگر که نشان‌دهنده تعداد اسلایدها هستند. لیست نقاط: استفاده از یک حلقه for برای ایجاد نقاط به ازای تعداد اسلایدها. carousel-inner: شامل تمام اسلایدها. @foreach: حلقه‌ای برای ایجاد هر اسلاید. بررسی اولین اسلاید: اگر اولین اسلاید است، کلاس active به آن اضافه می‌شود. تصویر اسلاید: نمایش تصویر هر اسلاید با استفاده از مسیر Src و لینک مرتبط با آن. ۲. نمایش تصاویر تبلیغاتی کد: html <div class="col-lg-3 col-md-4 col-xs-12 pl mt-1"> <div class="adplacement-container-column"> <a href="#" class="adplacement-item"> <div class="adplacement-sponsored-box"> <img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.L1)?.FirstOrDefault()?.Src ?? '' "> </div> </a> <a href="#" class="adplacement-item"> <div class="adplacement-sponsored-box"> <img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.L2)?.FirstOrDefault()?.Src ?? ''"> </div> </a> </div> </div> توضیح: نمایش تصاویر تبلیغاتی در مکان‌های L1 و L2: فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آن‌ها ImageLocation.L1 و ImageLocation.L2 باشد. اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده می‌کند. مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر. ۳. بنر تصویر مرکز تمام صفحه کد: html <div class="-container-column mt-4"> <a href="#" class="adplacement-item img-banner"> <div class="adplacement-sponsored-box"> <img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.R1)?.FirstOrDefault()?.Src ?? ''"> </div> </a> </div> توضیح: نمایش تصویر در مکان R1: فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصویری که محل قرارگیری آن ImageLocation.R1 باشد. اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده می‌کند. مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر.
پروژه ASP.Net Core MVC (وب و سی شارپ)
در این بخش صفحه اصلی پویا
۴. اسلایدر دوربین عکاسی کد: html <div class="one-slider"> <h4>دوربین عکاسی</h4> <div class="owl-carousel owl-theme ov1"> @foreach (var item in Model.PageImages.Where(p => p.ImageLocation == ImageLocation.G1).ToList()) { <div class="item"> <figure> <a href=""><img src="~/@item.Src" class="w-100" /></a> </figure> <h5>Adata d5-32G</h5> <span>112.000 تومان</span> </div> } </div> </div> توضیح: اسلایدر محصولات دوربین عکاسی: فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آن‌ها ImageLocation.G1 باشد. حلقه @foreach: ایجاد اسلایدها به ازای هر تصویر فیلتر شده. نمایش تصویر: استفاده از خاصیت Src برای نمایش تصویر. نمایش نام و قیمت محصول: نمایش نمونه‌ای از نام و قیمت محصول به صورت استاتیک. ۵. بنر تصویر تمام صفحه مرکزی کد: html <div class="col-12"> <a href="#" class="adplacement-item mb-4"> <div class="adplacement-sponsored_box"> <img src="~/@Model.PageImages.Where(p => p.ImageLocation == ImageLocation.CenterFullScreen)?.FirstOrDefault()?.Src ?? ''"> </div> </a> </div> توضیح: نمایش تصویر در مکان CenterFullScreen: فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصویری که محل قرارگیری آن ImageLocation.CenterFullScreen باشد. اولین تصویر مناسب: استفاده از FirstOrDefault برای انتخاب اولین تصویر که معیار را برآورده می‌کند. مسیر تصویر: استفاده از خاصیت Src برای نمایش تصویر. ۶. اسلایدر محصولات موبایل و تبلت کد: html <div class="two-slider"> <h4>موبایل و تبلت</h4> <div class="owl-carousel owl-theme ov2"> @foreach (var item in Model.PageImages.Where(p => p.ImageLocation == ImageLocation.G2).ToList()) { <div class="item"> <figure> <a href=""><img src="~/@item.Src" class="w-100" /></a> </figure> <h5>Adata d5-32G</h5> <span>112.000 تومان</span> </div> } </div> </div> توضیح: اسلایدر محصولات موبایل و تبلت: فیلتر کردن تصاویر: استفاده از LINQ برای انتخاب تصاویری که محل قرارگیری آن‌ها ImageLocation.G2 باشد. حلقه @foreach: ایجاد اسلایدها به ازای هر تصویر فیلتر شده. نمایش تصویر: استفاده از خاصیت Src برای نمایش تصویر. نمایش نام و قیمت محصول: نمایش نمونه‌ای از نام و قیمت محصول به صورت استاتیک. نتیجه‌گیری این کد ویو برای صفحه اصلی شامل نمایش اسلایدر اصلی، تصاویر تبلیغاتی و بنرها، و اسلایدرهای محصولات مختلف است. از کلاس‌های Bootstrap و Owl Carousel برای استایل‌دهی و ایجاد کاروسل‌ها استفاده می‌کند. داده‌ها از مدل ViewModel دریافت می‌شوند و به صورت داینامیک در صفحه نمایش داده می‌شوند.
Test_Store 14.zip
حجم: 56.5M
ادامه درس بخش صفحه اصلی پویا که خودم اعتبار سنجی کردم بدونه کمک استاد که دیگران نگویند پروژه خطا میده
کوکی cookie سلام! بیایید ابتدا توضیح دهیم که کوکی چیست و سپس نحوه استفاده از کوکی‌ها در ASP.NET را بررسی کنیم. کوکی چیست؟ کوکی یک فایل کوچک متنی است که توسط وب‌سایت‌ها در مرورگر کاربر ذخیره می‌شود. این فایل‌ها شامل اطلاعاتی مانند تنظیمات کاربر، وضعیت نشست (session)، و شناسه‌های کاربری هستند. کوکی‌ها برای ذخیره‌سازی اطلاعات کاربر بین درخواست‌های مختلف به سرور استفاده می‌شوند. نحوه استفاده از کوکی‌ها در ASP.NET ۱. ایجاد و تنظیم کوکی برای ایجاد و تنظیم یک کوکی در ASP.NET، می‌توان از شیء HttpCookie استفاده کرد و سپس آن را به پاسخ HTTP اضافه کرد. نمونه کد: csharp public ActionResult SetCookie() { HttpCookie cookie = new HttpCookie("UserPreferences"); cookie["Theme"] = "Dark"; cookie["Font"] = "Arial"; cookie.Expires = DateTime.Now.AddDays(7); // زمان انقضای کوکی (مثلاً ۷ روز) Response.Cookies.Add(cookie); return RedirectToAction("Index"); } ۲. خواندن کوکی برای خواندن یک کوکی در ASP.NET، می‌توان از شیء HttpRequest و مجموعه Request.Cookies استفاده کرد. نمونه کد: csharp public ActionResult GetCookie() { HttpCookie cookie = Request.Cookies["UserPreferences"]; if (cookie != null) { string theme = cookie["Theme"]; string font = cookie["Font"]; ViewBag.Theme = theme; ViewBag.Font = font; } return View(); } ۳. حذف کوکی برای حذف یک کوکی، باید تاریخ انقضای کوکی را به گذشته تنظیم کنید. این کار باعث می‌شود که مرورگر کوکی را حذف کند. نمونه کد: csharp public ActionResult RemoveCookie() { if (Request.Cookies["UserPreferences"] != null) { HttpCookie cookie = new HttpCookie("UserPreferences"); cookie.Expires = DateTime.Now.AddDays(-1); // تاریخ انقضا به گذشته تنظیم شده Response.Cookies.Add(cookie); } return RedirectToAction("Index"); } گزینه‌های کوکی (Cookie Options) هنگام ایجاد یک کوکی، می‌توان گزینه‌های مختلفی را تنظیم کرد مانند زمان انقضا، دامنه، مسیر، و امنیت. نمونه کد با گزینه‌های کوکی: csharp public ActionResult SetCookieWithOptions() { HttpCookie cookie = new HttpCookie("UserPreferences") { ["Theme"] = "Dark", ["Font"] = "Arial", Expires = DateTime.Now.AddDays(7), // زمان انقضای کوکی (مثلاً ۷ روز) Path = "/", // مسیر کوکی Domain = "example.com", // دامنه کوکی Secure = true, // فقط از طریق HTTPS HttpOnly = true // فقط از طریق HTTP، دسترسی جاوااسکریپت محدود }; Response.Cookies.Add(cookie); return RedirectToAction("Index"); } نتیجه‌گیری با استفاده از این روش‌ها، می‌توانید کوکی‌ها را در ASP.NET مدیریت کنید. کوکی‌ها ابزاری قوی برای ذخیره اطلاعات کاربر در مرورگر هستند و می‌توانند تجربه کاربری بهتری را فراهم کنند.
اگر به یک کوکی تاریخ انقضا ندهید، به طور پیش‌فرض به عنوان یک کوکی نشست (session cookie) در نظر گرفته می‌شود. این بدان معناست که کوکی تا زمانی که مرورگر باز باشد معتبر خواهد بود و هنگامی که مرورگر بسته شود، کوکی به طور خودکار حذف می‌شود. نمونه کد: csharp public ActionResult SetCookieWithoutExpiration() { HttpCookie cookie = new HttpCookie("UserPreferences"); cookie["Theme"] = "Dark"; cookie["Font"] = "Arial"; // تاریخ انقضا تنظیم نمی‌شود، بنابراین به عنوان کوکی نشست در نظر گرفته می‌شود Response.Cookies.Add(cookie); return RedirectToAction("Index"); } در این مثال، کوکی‌ای که ایجاد شده است تا زمانی که مرورگر باز باشد معتبر خواهد بود و پس از بستن مرورگر، کوکی حذف می‌شود.
Test_Store 15.zip
حجم: 56.9M
افزودن به سبد خرید قسمت اول
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
این کد مربوط به سرویس سبد خرید (CartService) در یک فروشگاه اینترنتی است. سرویس سبد خرید شامل عملکردهایی برای اضافه کردن محصول به سبد خرید، حذف محصول از سبد خرید، دریافت سبد خرید کاربر، افزایش تعداد یک محصول در سبد خرید و کاهش تعداد یک محصول در سبد خرید می‌باشد. بیایید نگاهی دقیق‌تر به عملکردهای مختلف این سرویس بیندازیم: تعریف Interface (رابط) ICartService csharp public interface ICartService { ResultDto AddToCart(long ProductId, Guid BrowserId); ResultDto RemoveFromCart(long ProductId, Guid BrowserId); ResultDto<CartDto> GetMyCart(Guid BrowserId); ResultDto Add(long CartItemId); ResultDto LowOff(long CartItemId); } کلاس CartService سازنده و زمینه‌های کلاس csharp public class CartService : ICartService { private readonly IDataBaseContext _context; public CartService(IDataBaseContext context) { _context = context; } IDataBaseContext از پایگاه داده استفاده می‌کند و عملیات‌های داده‌ای را فراهم می‌کند. سازنده کلاس، نمونه‌ای از IDataBaseContext را دریافت کرده و آن را در متغیر _context ذخیره می‌کند. افزودن محصول به سبد خرید csharp public ResultDto AddToCart(long ProductId, Guid BrowserId) { var cart = _context.Carts.Where(p => p.BrowserId == BrowserId && p.Finished == false).FirstOrDefault(); if (cart == null) { Cart newCart = new Cart() { Finished = false, BrowserId = BrowserId, }; _context.Carts.Add(newCart); _context.SaveChanges(); cart = newCart; } var product = _context.Products.Find(ProductId); var cartItem = _context.CartItems.Where(p => p.ProductId == ProductId && p.CartId == cart.Id).FirstOrDefault(); if (cartItem != null) { cartItem.Count++; } else { CartItem newCartItem = new CartItem() { Cart = cart, Count = 1, Price = product.Price, Product = product, }; _context.CartItems.Add(newCartItem); _context.SaveChanges(); } return new ResultDto() { IsSuccess = true, Message = $"محصول {product.Name} با موفقیت به سبد خرید شما اضافه شد", }; } ابتدا بررسی می‌شود که آیا سبد خریدی برای کاربر موجود است یا نه. اگر سبد خریدی وجود ندارد، یک سبد خرید جدید ایجاد می‌شود. سپس محصول مورد نظر در پایگاه داده جستجو می‌شود. اگر محصولی با شناسه مورد نظر در سبد خرید وجود داشته باشد، تعداد آن افزایش می‌یابد. در غیر این صورت، محصول جدیدی به سبد خرید اضافه می‌شود. افزایش تعداد یک محصول در سبد خرید csharp public ResultDto Add(long CartItemId) { var cartItem = _context.CartItems.Find(CartItemId); cartItem.Count++; _context.SaveChanges(); return new ResultDto() { IsSuccess = true, }; } محصول مورد نظر در سبد خرید بر اساس CartItemId جستجو می‌شود و تعداد آن افزایش می‌یابد. کاهش تعداد یک محصول در سبد خرید csharp public ResultDto LowOff(long CartItemId) { var cartItem = _context.CartItems.Find(CartItemId); if (cartItem.Count <= 1) { return new ResultDto() { IsSuccess = false, }; } cartItem.Count--; _context.SaveChanges(); return new ResultDto() { IsSuccess = true, }; } محصول مورد نظر در سبد خرید بر اساس CartItemId جستجو می‌شود و تعداد آن کاهش می‌یابد. اگر تعداد محصول کمتر یا برابر با ۱ باشد، عملیات کاهش ناموفق خواهد بود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
دریافت سبد خرید کاربر csharp public ResultDto<CartDto> GetMyCart(Guid BrowserId) { var cart = _context.Carts .Include(p => p.CartItems) .ThenInclude(p => p.Product) .ThenInclude(p => p.ProductImages) .Where(p => p.BrowserId == BrowserId && p.Finished == false) .OrderByDescending(p => p.Id) .FirstOrDefault(); return new ResultDto<CartDto>() { Data = new CartDto() { CartItems = cart.CartItems.Select(p => new CartItemDto { Count = p.Count, Price = p.Price, Product = p.Product.Name, Id = p.Id, Images = p.Product?.ProductImages?.FirstOrDefault()?.Src ?? "", }).ToList(), }, IsSuccess = true, }; } سبد خرید کاربر بر اساس BrowserId جستجو می‌شود و لیستی از محصولات موجود در سبد خرید همراه با اطلاعات آن‌ها برگردانده می‌شود. حذف محصول از سبد خرید csharp public ResultDto RemoveFromCart(long ProductId, Guid BrowserId) { var cartitem = _context.CartItems.Where(p => p.Cart.BrowserId == BrowserId).FirstOrDefault(); if (cartitem != null) { cartitem.IsRemoved = true; cartitem.RemoveTime = DateTime.Now; _context.SaveChanges(); return new ResultDto { IsSuccess = true, Message = "محصول از سبد خرید شما حذف شد" }; } else { return new ResultDto { IsSuccess = false, Message = "محصول یافت نشد" }; } } محصول مورد نظر بر اساس ProductId و BrowserId جستجو می‌شود و سپس از سبد خرید حذف می‌شود. کلاس‌های DTO CartDto و CartItemDto این کلاس‌ها برای انتقال داده‌های سبد خرید و آیتم‌های سبد خرید استفاده می‌شوند. csharp public class CartDto { public List<CartItemDto> CartItems { get; set; } } public class CartItemDto { public long Id { get; set; } public string Product { get; set; } public string Images { get; set; } public int Count { get; set; } public int Price { get; set; } } CartDto شامل لیستی از CartItemDto است که اطلاعات مربوط به محصولات موجود در سبد خرید را نگهداری می‌کند. نتیجه‌گیری این کد شامل عملیاتی برای مدیریت سبد خرید در یک فروشگاه اینترنتی است. هر عملیاتی مانند افزودن محصول به سبد خرید، حذف محصول، افزایش و کاهش تعداد محصول و دریافت سبد خرید کاربر به طور کامل پیاده‌سازی شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
بیایید کد را تحلیل کنیم و توضیحات هر بخش را مرور کنیم. این کد در namespace Test_Store.Domain.Entities.Carts قرار دارد و شامل دو کلاس Cart و CartItem است که سبد خرید و آیتم‌های سبد خرید را در یک فروشگاه اینترنتی مدیریت می‌کنند. کلاس Cart این کلاس نمایانگر یک سبد خرید است. csharp public class Cart : BaseEntity { public virtual User User { get; set; } public long? UserId { get; set; } public Guid BrowserId { get; set; } public bool Finished { get; set; } public ICollection<CartItem> CartItems { get; set; } } User (کاربر): این ویژگی به کاربر مرتبط با سبد خرید اشاره دارد. این رابطه به صورت مجازی (virtual) تعریف شده است، که به Entity Framework اجازه می‌دهد تا رابطه را به صورت lazy load مدیریت کند. UserId: شناسه کاربر مرتبط با سبد خرید. این مقدار می‌تواند null باشد، به این معنا که ممکن است سبد خرید بدون کاربر (مثلاً برای مهمان‌ها) ایجاد شود. BrowserId (شناسه مرورگر): یک GUID که به مرورگر کاربر اختصاص داده شده است. این ویژگی می‌تواند برای پیگیری سبد خرید کاربر حتی بدون ورود به سیستم استفاده شود. Finished (پایان یافته): یک مقدار بولی که نشان می‌دهد آیا سبد خرید کامل شده است (مثلاً خرید انجام شده است) یا خیر. CartItems (آیتم‌های سبد خرید): یک مجموعه از آیتم‌های سبد خرید که در این سبد خرید وجود دارند. این رابطه به صورت یک به چند تعریف شده است، یعنی یک سبد خرید می‌تواند چندین آیتم سبد خرید داشته باشد. کلاس CartItem این کلاس نمایانگر یک آیتم در سبد خرید است. csharp public class CartItem : BaseEntity { public virtual Product Product { get; set; } public long ProductId { get; set; } public int Count { get; set; } public int Price { get; set; } public virtual Cart Cart { get; set; } public long CartId { get; set; } } Product (محصول): این ویژگی به محصول مرتبط با آیتم سبد خرید اشاره دارد. این رابطه نیز به صورت مجازی (virtual) تعریف شده است تا Entity Framework بتواند به صورت lazy load این رابطه را مدیریت کند. ProductId: شناسه محصول مرتبط با آیتم سبد خرید. Count (تعداد): تعداد محصول در این آیتم سبد خرید. این مقدار نشان می‌دهد که چند واحد از محصول در سبد خرید قرار دارد. Price (قیمت): قیمت محصول در زمان اضافه شدن به سبد خرید. Cart (سبد خرید): این ویژگی به سبد خرید مرتبط با این آیتم اشاره دارد. این رابطه به صورت مجازی (virtual) تعریف شده است. CartId: شناسه سبد خرید مرتبط با این آیتم. نتیجه‌گیری این کلاس‌ها به همراه ویژگی‌هایشان، ساختار داده‌ای سبد خرید و آیتم‌های مرتبط با آن را در یک فروشگاه اینترنتی تعریف می‌کنند. با استفاده از این کلاس‌ها می‌توان سبد خرید کاربران را مدیریت کرد، آیتم‌ها را به سبد خرید اضافه کرد، تعداد آیتم‌ها را تغییر داد و سبد خرید را نهایی کرد.