MVC返回带有外键的实体

本文关键字:实体 返回 MVC | 更新日期: 2023-09-27 17:55:04

MVC新手,并通过应用程序反向工作。我有一个实体ItemType,它有一个ItemIndicator类的外键。基本上,我正在创建一个具有ItemType的可编辑网格。代码和其中的ItemIndicator.description。当用户单击网格时,ItemIndicator字段显示可能的ItemIndicator.description的下拉列表。在我的存储库中,我们有一个任务,它返回如下类型的异步任务:

        public async Task<PagedResults<ItemType>> GetAsync(int indId, int skip = 0, int take = -1)
    {
        PagedResults<ItemType> pagedResults;
        try
        {
            IQueryable<ChargeType> query = _dbSet.Include("IndicatorDetails");
            query = take == -1
                ? query.OrderBy(i => i.IndicatorDetails.Code)
                : query.OrderBy(i => i.IndicatorDetails.Code);
            var data = await query.ToListAsync();
            pagedResults = new PagedResults<ItemType>(data, skip, take, data.Count);
        }
        catch (Exception e)
        {
            throw new Exception(string.Format("Could not get charge types from database. {0}", e.Message), e);
        }
        return pagedResults;
    }

,它可以工作,而且我实际上理解它。这个想法是包括指标细节,其中包括我需要的指标描述。我的问题是第二个任务:

       public async Task<ItemType> GetByIdAsync(int id)
    {
        return await _dbSet.FirstOrDefaultAsync(i => i.Id == id);
    }

所以第一个任务返回所有的项目类型,以及相关的描述信息。我需要第二个任务做的是相同的事情,我只需要一个ItemType和它关联的描述信息。因为我不期望多个结果,应该只返回一行,我很困惑,如何重新工作表达式返回ItemDescription时,id传入。我得到它在PagedResults任务中工作,因为它的类型是IQueryable,只是不确定如何为单行做。

抱歉,如果这看起来有点分散,一次学习整个框架。

MVC返回带有外键的实体

您应该能够使用.Include和实体将在ItemTypeIndicatorDetails之间建立正确的连接

public async Task<ItemType> GetByIdAsync(int id)
{
    return await _dbSet.Include("IndicatorDetails").FirstOrDefaultAsync(i => i.Id == id);
}