Как исправить загрузку Entity Framework Eager, выходящую пустой или нулевой - PullRequest
1 голос
/ 04 октября 2019

Я настроил свою базу данных с двумя таблицами Отчеты и расходы, объединенные в 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

1 Ответ

1 голос
/ 04 октября 2019

Проверьте консоль отладки.

Заметили бы ошибку


//If using ASP.NET Core MVC, add this to the ConfigureServices method of your startup.cs file:

services.AddMvc()
    .AddJsonOptions(
        options => options.SerializerSettings.ReferenceLoopHandling =            
        Newtonsoft.Json.ReferenceLoopHandling.Ignore
    );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...