如何制作书籍/书籍类别?

Posted

技术标签:

【中文标题】如何制作书籍/书籍类别?【英文标题】:How Can I Make a Book / Book Category? 【发布时间】:2021-04-30 07:52:17 【问题描述】:

TblBook.cs

public class TBLBook : IEntity

    [Key]
    public int BookId  get; set; 
    public string BookName  get; set; 

    [ForeignKey("TblCategory")]
    public int CategoryId  get; set; 
    public int WriterId  get; set; 
    public string BookYearofPublication  get; set; //Basım Yılı
    public string BookPublishingHouse  get; set;  //Yayın evi
    public string BookPage  get; set; 
    public bool BookStatus  get; set; 

    public TBLCategory TblCategory  get; set; 

TblCategory.cs

public class TBLCategory : IEntity

    [Key]
    public int CategoryId  get; set; 
    public string CategoryName  get; set; 

    public  virtual ICollection<TBLBook> TblBooks  get; set; 

我这样做是因为它是企业架构。

public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity>
        where TEntity : class, IEntity, new()
        where TContext : DbContext, new()
    
        ////return _context.Categories.Include(i => i.SubCategories).ToList();
        public List<TEntity> GetList(Expression<Func<TEntity, bool>> filter=null)
        
            using (TContext context = new TContext())
            
                return filter == null ? context.Set<TEntity>().ToList() : context.Set<TEntity>().Where(filter).ToList();
            
        

业务:

public List<TBLBook> GetList()

    return _bookDal.GetList();

控制器视图

public IActionResult Index()

    var query = new BookListViewModel
    
        TblBooks = _bookService.GetList()
    ;
    return View(query);

索引视图:

<tr>
    <td>@b.BookId</td>
    <td>@b.BookName</td>
    <td>@b.WriterId</td>
    <td>@b.CategoryId</td>     <!--Problem: @b.TblCategory.CategoryName-->
    <td>@b.BookYearofPublication</td>
    <td>@b.BookPublishingHouse</td>
    <td>@b.BookPage</td>
    <td>@b.BookStatus</td>
</tr>

我的问题是; 当我这样做时 @b.TblCategories.CategoryName

抛出空值或错误。

我无法显示相应的类别名称。怎么填,谢谢 我的英语不好,对不起。我试着用图片来解释。

简而言之,这就是我想要做的: 出现类别 ID。我希望它显示为类别名称。但它看起来是空白的,我应该填什么。

截图:

【问题讨论】:

【参考方案1】:

默认不加载相关实体。

EF6:Loading Related Entities

EF 核心:Loading Related Entities

另外,不要在数据库或代码中使用“TBL”前缀,也不要将 DbContext 包装在额外的存储库层中。它已经是一个存储库。

所以加载如下查询:

var books = db.Books.Include(b => b.Category).ToList();

【讨论】:

以上是关于如何制作书籍/书籍类别?的主要内容,如果未能解决你的问题,请参考以下文章

如何Word制作小书籍

在将数据插入书籍表时选择类别和子类别

为类别、子类别和相关书籍设计数据库

核心数据关系

即使 Book 实体具有类别外键,也无法获取类别的书籍?

EasyUI项目之门户书籍类别查询图片上传