0

产品和类别表具有一对多的关系。我想从产品中获取类别名称,但出现了一些错误。我的代码正在创建新的 dabase 第一个项目,但不适用于 asp.net 核心项目。

 public class Category : IEntity
    {
        public Category()
        {
            Children = new List<Category>();
            Products = new List<Product>();
        }
        public int CategoryId { get; set; }
        public string CategoryName { get; set; }
        public int? ParentCategoryId { get; set; }
        public string Description { get; set; }
        public bool IsActive { get; set; }
        public bool? IsParent { get; set; }
        public string LangCode { get; set; }
        public virtual Category Parent { get; set; }
        public virtual ICollection<Category> Children { get; set; }
        public virtual ICollection<Product> Products { get; set; }
    }



public class Product : IEntity
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public int? CategoryId { get; set; }
        public decimal UnitPrice { get; set; }
        public short? UnitsInStock { get; set; }
        public string Description { get; set; }
        public string ProductCode { get; set; }
        public bool? IsActive { get; set; }
        public string UnitCode { get; set; }
        public double? GrossWeight { get; set; }
        public double? NetWeight { get; set; }
        public DateTime? CreateDate { get; set; }
        public DateTime? UpdateDate { get; set; }
        public int? CreateUser { get; set; }
        public int? UpdateUser { get; set; }
        public double? Length { get; set; }
        public double? Width { get; set; }
        public double? Height { get; set; }
        public string SizeUnitCode { get; set; }
        public string Brand { get; set; }
        public string AlternateProductCode { get; set; }
        [ForeignKey("CategoryId")]
        public virtual Category Category { get; set; }
    }

 public class DataContext:DbContext
{
    public static string ConnectionString { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {         
        optionsBuilder.UseSqlServer(ConnectionString);
    }
    public DbSet<Page> Pages { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Category>()
                .HasOne(i => i.Parent)
                .WithMany(i => i.Children)
                .HasForeignKey(i => i.ParentCategoryId);
        modelBuilder.Entity<Product>()
            .HasOne(p => p.Category)
            .WithMany(b => b.Products)
            .HasForeignKey(f => f.CategoryId);
    }
}
public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<IPageService, PageManager>();
            services.AddScoped<IPageDal, EfPageDal>();
            services.AddScoped<ICategoryService, CategoryManager>();
            services.AddScoped<ICategoryDal, EfCategoryDal>();
            services.AddScoped<IProductService, ProductManager>();
            services.AddScoped<IProductDal, EfProductDal>();
            services.AddSession();
            services.AddDistributedMemoryCache();
            services.AddMvc();
            DataContext.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
        }

   public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity>
        where TEntity : class, IEntity, new()
        where TContext : DbContext, new()
    {


        public List<TEntity> GetList(Expression<Func<TEntity, bool>> filter = null)
        {
            using (var context = new TContext())
            {
                return filter == null
                    ? context.Set<TEntity>().ToList()
                    : context.Set<TEntity>().Where(filter).ToList();
            }
        } 
    }

屏幕

4

1 回答 1

0

我像下面的代码一样获取数据。但是这段代码很愚蠢。我正在等待解决这个问题的好主意。

public ActionResult Index()
{
    ProductListViewModel model = new ProductListViewModel
    {
        Products = _productService.GetAll()
    };

    model.Products.ForEach(b =>
    {
        b.ProductCategory = _categoryService.GetByID(b.CategoryId);
    });

    return View(model);
}
于 2017-07-13T09:28:44.187 回答