Я настроил свою базу данных с двумя таблицами Отчеты и расходы, объединенные в ReportId. Я не могу себе представить, что мои жизни не обойдутся без затрат.
Провел несколько дней в уроках.
using ExpenseAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace ExpenseAPI.Data
{
public class ReportsDbContext : DbContext
{
public ReportsDbContext(DbContextOptions<ReportsDbContext> options):base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
System.Console.Out.WriteLine("on model create");
/* Expense composite key */
modelBuilder.Entity<Expense>()
.HasKey(c => new { c.ReportId, c.ExpenseId });
/* Reports to Expenses one to many */
modelBuilder.Entity<Reports>()
.HasMany(e => e.Expenses)
.WithOne(r => r.Report)
.HasPrincipalKey(e => e.ReportId);
}
public DbSet<Reports> Reports { get; set; }
}
}
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ExpenseAPI.Models
{
public class Reports
{
public Reports()
{
Expenses = new List<Expense>();
}
[Key]
public int ReportId { get; set; }
[Required]
public string ReportName { get; set; }
public ICollection<Expense> Expenses { get; set; }
}
}
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ExpenseAPI.Models
{
public class Expense
{
[Key, Column(Order = 0)]
public int ReportId { get; set; }
[Key, Column(Order = 2)]
public int ExpenseId { get; set; }
[Required]
public DateTime Date { get; set; }
[Required]
public decimal Amount { get; set; }
[Required]
public string Description { get; set; }
[Required]
public string Payee { get; set; }
public Reports Report { get; set; }
}
}
using System.Linq;
using ExpenseAPI.Data;
using ExpenseAPI.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace ExpenseAPI.Controllers
{
[Route("api/reports")]
[ApiController]
public class ReportsController : ControllerBase
{
ReportsDbContext reportsDbContext;
public ReportsController(ReportsDbContext _reportsDbContex)
{
reportsDbContext = _reportsDbContex;
}
// GET: api/Reports
[HttpGet]
public IActionResult Get()
{
var result = reportsDbContext.Reports;
result.Include("Expenses");
return Ok(result);
// ISSUE IS HERE expenses is empty
}
}
}
Результат:
[{"reportId":1,"reportName":"August Expense 2019-08","expenses":[]}]
Ожидается:
[{"reportId":1,"reportName":"August Expense 2019-08","expenses":[
{Expense Data Here}
]}]
Прежде чем кто-то скажет, что данные расходов есть, естьзапись о расходах с идентификатором отчета 1