Почему результаты JSON не завершены на основе вложенных связанных данных с использованием моделей EF в .Net Core - PullRequest
2 голосов
/ 19 сентября 2019

Я новичок в ядре .net, и я попытался создать простую связь между двумя моделями с инверсией, поэтому мой код был:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace doPayrollTestAuthAPI.Entities.Models
{
    public class Note
    {
        public Guid Id { get; set; }
        public string Text { get; set; }
        public bool isDeleted { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime UpdatedAt { get; set; }


        [ForeignKey("LookupForeignKey")]
        public Lookup LookupObj { get; set; }


    }




    public class Lookup
    {
        public Guid Id { get; set; }
        public string Name_FL { get; set; }
        public string Name_SL { get; set; }

        public string LookupCategory { get; set; }
        public string LookupType { get; set; }

        // static columns
        public bool isDeleted { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime UpdatedAt { get; set; }


        [InverseProperty("LookupObj")]
        public List<Note> NotesObjects { get; set; }


    }    
}

, и когда я пытался получить заметки с соответствующимиданные, используя следующий код

var notes = await _context.Notes
    .Include(p => p.LookupObj)
    .AsNoTracking()
    .ToListAsync();

Я получил следующие результаты:

[
{
    "id": "fc09fd08-95a0-487e-a28f-08d73b95eb94",
    "text": "the first note",
    "isDeleted": false,
    "createdAt": "0001-01-01T00:00:00",
    "updatedAt": "0001-01-01T00:00:00",
    "lookupObj": {
        "id": "9b7adbef-9322-4cd3-0e79-08d73b95eb97",
        "name_FL": "USD",
        "name_SL": "الدولار الامريكي",
        "lookupCategory": "Country",
        "lookupType": "System",
        "isDeleted": false,
        "createdAt": "0001-01-01T00:00:00",
        "updatedAt": "0001-01-01T00:00:00",
        "usersWithBank": null,
        "usersWithSocialInsuranceOffice": null,
        "usersWithCountryOffice": null,
        "usersWithCurrency": null,
        "notesObjects": [

Кажется, что данные повреждены и JSON не завершен

Так что это верно, чтоздесь выбрано обратное свойство!

Заранее спасибо!

1 Ответ

1 голос
/ 20 сентября 2019

Для этой проблемы это вызвано ссылочным циклом, попробуйте настроить, как показано ниже:

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