I'm trying to create a simple RESTful API that can retrieve information from a Sql Server DB. I'm using .Net Core, together with EF Core for ORM.
I have mapped two tables in my database by foreign key. However, when i try to implement the relationship in EF core, it seems that no rows exist in the BaseStats table that reference the given champion row in the Champions table.
I get the following result when making the API call:
{
"championId": 1,
"championName": "Vladimir",
"baseStats": null
}
It seems that EF core somehow doesn't recognize the relationship. I must have missed something.
Any advice would be greatly appreciated :) Below is my code. Thanks in advance.
Principal entity:
public class Champion
{
public int ChampionId { get; set; }
public string ChampionName { get; set; }
public ICollection<BaseStat> BaseStats { get; set; }
}
Dependent entity
public class BaseStat
{
public int BaseStatId { get; set; }
public int StatTypeId { get; set; }
public decimal Base { get; set; }
public decimal Growth { get; set; }
public Champion Champion { get; set; }
}
DB context
public class Context : DbContext
{
public DbSet<Champion> Champions { get; set; }
public DbSet<BaseStat> BaseStats { get; set; }
public Context(DbContextOptions<Context> options) : base (options)
{
//
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BaseStat>()
.HasOne(p => p.Champion)
.WithMany(b => b.BaseStats);
}
}
Controller
[Route("api/[controller]/[action]")]
public class ChampionController : Controller
{
private readonly Context _context;
public ChampionController(Context context)
{
_context = context;
}
public async Task<JsonResult> Stats()
{
var champ = await _context.Champions.FirstOrDefaultAsync(c => c.ChampionId == 1);
return Json(champ);
}
}
I updated the stats action in my controller according to Ivan Stoev's answer.
public async Task<JsonResult> Stats()
{
Champion champion = await _context.Champions
.Include(c => c.BaseStats)
.FirstOrDefaultAsync();
return Json(champion);
}
While the action returns the correct information, when i make the API call through the browser, it seems to keep loading as if the call doesn't end. (spinner in browser tab, google chrome)
While at the same time, i can't make the API call in Postman without getting the following error:
Could not get any response
There was an error connecting to http://localhost:50185/api/champion/stats.
Why this might have happened:
The server couldn't send a response:
Ensure that the backend is working properly
Self-signed SSL certificates are being blocked:
Fix this by turning off 'SSL certificate verification' in Settings > General
Client certificates are required for this server:
Fix this by adding client certificates in Settings > Certificates
Request timeout:
Change request timeout in Settings > General
Does anyone have an idea as to what might cause this?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.