【问题标题】:MVC returning entity with foreign key带有外键的 MVC 返回实体
【发布时间】:2015-06-10 13:12:59
【问题描述】:

是 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 类型的,只是不确定如何对单行执行此操作。

抱歉,如果这看起来有点分散,请立即学习整个框架。提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 伙计,太简单了。非常感谢迈克尔!
    • 如果我没有身份证,有什么快速解决办法吗?只想返回所有行,但不知道如何从存储库中关联两者
    • _dbSet.Include("IndicatorDetails").ToList()
    • 不走运,IndicatorDetails 返回 null。
    • 返回null
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 2019-04-15
    • 1970-01-01
    • 2012-09-07
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多