4

我与实体框架的核心探索和利用,同时通过本指南https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html读取与不同型号的异常的代码第一种方式开始了。如何加载相关的实体与实体框架核心

在EF6它有延迟加载和我能够真正轻松地拉动相关实体,但它是在EF没有核心的工作。我想知道如何使这个工作,或者如果有工作来解决它的工作。

这里是什么样子我的模型的两个例子:

public class Team 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Icon { get; set; } 
    public string Mascot { get; set; } 
    public string Conference { get; set; } 
    public int NationalRank { get; set; } 

    public List<Game> Games { get; set; } 
} 

public class Game 
{ 
    public string Id { get; set; } 
    public string Opponent { get; set; } 
    public string OpponentLogo { get; set; } 
    public string GameDate { get; set; } 
    public string GameTime { get; set; } 
    public string TvNetwork { get; set; } 
    public string TeamId { get; set; } 

    public Team Team { get; set; } 
} 

我想获得的所有游戏的一队,但截至目前为null。

我决定做一个Web Api项目,所以我有一个名为TeamsController的控制器,并且当我向控制器发出GET请求时,我想要获得与相关游戏填充的游戏属性的团队列表。

这是我曾尝试:

[HttpGet] 
public async Task<List<Team>> Get() 
{ 
    return await _context.Teams.Include(t => t.Games).ToListAsync(); 
} 

这是JSON结果:

[ 
    { 
    "id": "007b4f09-d4da-4040-be3a-8e45fc0a572b", 
    "name": "New Mexico", 
    "icon": "lobos.jpg", 
    "mascot": "New Mexico Lobos", 
    "conference": "MW - Mountain", 
    "nationalRank": null, 
    "games": [ 
     { 
     "id": "1198e6b1-e8ab-48ab-a63f-e86421126361", 
     "opponent": "vs Air Force*", 
     "opponentLogo": "falcons.jpg", 
     "gameDate": "Sat, Oct 15", 
     "gameTime": "TBD ", 
     "tvNetwork": null, 
     "teamId": "007b4f09-d4da-4040-be3a-8e45fc0a572b" 
     } 
    ] 
    } 
] 

当我这样做:

[HttpGet] 
public async Task<List<Team>> Get() 
{ 
    return await _context.Teams.ToListAsync(); 
} 

我得到的所有的球队,但Games属性为null。

我希望它能够将数据库中的所有团队以及每个团队的所有游戏归还。我怎样才能得到这个工作?

+2

根据[此](https://docs.efproject.net/en/latest/querying/related-data.html),迟缓装载尚未实现。 – Michael

+2

另请注意,延迟加载会导致性能问题,具体取决于您将拥有多少个团队。使用延迟加载时,您可能会有'1 + n = <调用数据库>',其中'n'是数据库中的团队数。 – Michael

+0

@Michael在文章的Eager Loading部分,它说你可以使用.Include(),我曾尝试过,但由于某种原因,它只返回第一队和第一队的第一场比赛。就像它在json输出中显示的一样。你碰巧知道为什么它没有得到所有的结果? – Aaron

回答

2

延迟加载目前没有在实体框架核心中实现为indicated here,我建议您查看AutoMapper以在POCO中预测您的期望结果。因为你想要的会导致n + 1问题。

相关问题