生成一个类别的产品清单

问题描述 投票:0回答:1

我正在开发一个商店应用程序,我需要显示每个类别的产品。问题是每个产品都是由一个产品模板创建的,这个模板存储在一个表中,每个模板都与一个类别相关。

    namespace fardashahr.Models
{
    [Table("Product")]
    public class ProductModel
    {
        public ProductModel()
        {
            if (Specs == null)
            {
                Specs = new Dictionary<string, SpecItemsModel>();
            }
        }
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Required]
        public int ProductTemplateId { get; set; }

        [Required]
        public bool IsPublished { get; set; }

        [Required]
        public bool InStock { get; set; }

        [Range(95, 110)]

        public float SyncRate { get; set; }


        public DateTime? ProductionDate { get; set; }

        [Required]
        public DateTime RegisterationDate { get; set; }

        public string ImageName { get; set; }

        public IEnumerable<string> GalleryImages { get; set; }

        [NotMapped]
        public Dictionary<string, SpecItemsModel> Specs { get; set; }

        [ForeignKey("ProductTemplateId")]
        public virtual ProductTemplateModel ProductTemplate { get; set; }

        [ForeignKey("ManufacturerId")]
        public virtual CodingItemModel Manufacturer { get; set; }

        [ForeignKey("BrandId")]
        public virtual CodingItemModel Brand { get; set; }

        [ForeignKey("ModelId")]
        public virtual CodingItemModel Model { get; set; }

        [ForeignKey("SeriesId")]
        public virtual CodingItemModel Series { get; set; }
    }
}

这里是ProductTemplate:

    namespace fardashahr.Models
{
    [Table("ProductTemplate")]
    public class ProductTemplateModel
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        public int Id { get; set; }


        [StringLength(500)]
        public string Name { get; set; }

        [Required]  
        public int CategoryId { get; set; }


        [StringLength(500)]
        public string Description { get; set; }

        [ForeignKey("CategoryId")]
        public virtual CategoryModel Category{ get; set; }

    }
}

而控制器是:

namespace fardashahr.Controllers
{
    public class ProductsController : Controller
    {
        // GET: Products
        public ActionResult Index()
        {
            return RedirectToAction("Index", "Home");
        }

        public ActionResult Category(string name)
        {
            //declare a list of products
            List<ProductModel> productList;

            using(MainModel db = new MainModel())
            {
                //get category id
                CategoryModel category = db.Categories.Where(x => x.CategorytUrl == name).FirstOrDefault();
                int catId = category.Id;

                //initialize the list
                productList = db.Products.Where(x => x. == catId).ToList();
            }



        }
    }
}

最后,我想知道的是如何初始化一个产品列表。

asp.net asp.net-mvc entity-framework
1个回答
1
投票

在你的模型中,你添加了 virtual 关键字,表示导航属性将被自动加载,而不需要LINQ lambda。.include() 表达式。

因此,你可以立即访问导航属性并像这样加载列表。

productList = db.Products.Where(x => x.ProductTemplate.CategoryId == catId).ToList();

string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.Name;

string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.CategorytUrl;
© www.soinside.com 2019 - 2024. All rights reserved.