MVC返回带有外键的实体

时间:2015-06-10 13:13:00

标签: c# asp.net-mvc entity-framework

MVC的新手,并且几乎在应用程序中向后工作。我有一个实体ItemType,它有一个ItemIndicator类的外键。基本上我是在创建一个可编辑的网格,其中包含ItemType.code和ItemIndicator.description。当用户单击网格时,ItemIndicator字段显示可能的ItemIndicator.descriptions的dropDownList。在我的存储库中,我们有一个任务返回类型的异步任务,如下所示:

        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及其相关的描述信息。由于我不期望多于一个结果,应该只返回一行,我很困惑如何重写表达式以在传入id时返回ItemDescription。我知道它可以工作PagedResults任务,因为它的类型为IQueryable,只是不知道如何为单行执行此操作。

很抱歉,如果这看起来很分散,立刻学习整个框架。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您应该可以使用.Include,实体将在ItemTypeIndicatorDetails之间建立正确的连接

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