使用Include后没有服务器响应ASP.NET Core

时间:2017-08-24 18:47:20

标签: api server

我使用ASP.NET Core从我的数据库获得服务器响应有一个奇怪的问题。

所以CASE 1返回200 OK和一个不错的列表

public IActionResult GetTrades(int id)
{
    var positions = context.Trades.Where(x=>x.WebClientId==id).ToList();
    return Ok(positions);
}

然而,在这个Trades表中,我有其他对象,这些对象由他们的id引用,我也希望到达它们,所以我使用Include()。

public IActionResult GetTrades(int id)
{
    var positions = context.Trades.Where(x=>x.WebClientId==id)
                    .Include(s=>s.Strategy)
                    .Include(p=>p.Portfolio).ToList();

    return Ok(positions);
}

现在,奇怪的事情开始发生了。我在Postman没有回复。没有错误,没有,只是无法得到任何回应。

然而,如果我进入调试模式并在返回时放置一个断点,我需要的一切就在那里,所有对象都在那里,我可以进入其中的每一个,策略,投资组合,并查看所有模型细节。

希望其他人有类似的问题。感谢。

1 个答案:

答案 0 :(得分:1)

域模型中存在循环。我不得不使用AutoMapper和separete Resources模型来消除循环,一切都开始有效。

例如:

在Trade模型类中,有一个对Portfolio模型类的引用,如下所示:

public Portfolio Portfolio { get; set; } //virtual for lazy loading
public int PortfolioId { get; set; }   

在Porfolios课程中,有一个像这样的Trades类的引用:

 public IList<Trade> Trades { get; set; }

我在没有循环的情况下将这两个类重新创建为PortfolioResource和TradeResource,并编辑控制器以使用AutoMapper,如下所示:

public async Task<IEnumerable<TradeResource>> GetPositions(int id)
{

    var positions = await context.Trades
         .Where(x => x.WebClientId == id)
        .Include(s => s.Strategy)
        .Include(p => p.Portfolio)
         .ToListAsync();

    return mapper.Map<List<Trade>, List<TradeResource>>(positions);
}

在使用

在ASP.NET Core中正确安装AutoMapper之后,我还为此创建了一个映射配置文件

1)dotnet添加包AutoMapper 2)dotnet add package AutoMapper.Extensions.Microsoft.DependancyInjection 3)dotnet restore

还添加了services.AddAutoMapper();到ConfigureServices

中的StartUp.cs

最好是映射器类。

public class MappingProfie:Profile
{
    public MappingProfie()
    {
        CreateMap<Trade, TradeResource>();
        CreateMap<Portfolio, PortfolioResource>();
        CreateMap<WebClient, WebClientResource>();
        CreateMap<Strategy, StrategyResource>();
    }
}

此后一切都开始了。