EF Core прекратить рекурсию на theninclude - PullRequest
0 голосов
/ 03 февраля 2020

Я использую. NET Core 3 с последней версией Entity Framework Core. В настоящее время у меня есть 3 таблицы, две нормальные таблицы и одна таблица ссылок. Они структурированы ниже. Я пытаюсь получить аксессуар для транспортного средства, с которым он связан, в настоящее время происходит то, что он возвращается обратно в себя и снова загружает объект транспортного средства (так как у него есть ссылка на таблицу ссылок). Кто-нибудь знает, как я могу остановить эту рекурсию? Я не хочу, чтобы в VehicleAccessory был массив vehicleAccessories, который вызывает рекурсию.

Вызов

var result = _context.Vehicles
            .Include(x => x.VehicleAccessories)
            .ThenInclude(x => x.Accessory)
            .Include(x => x.VehicleImages)
            .ThenInclude(x => x.Image)
            .ToList();
        return result;

Результат вызова

{
    "id": 1,
    "registrationNumber": "123456",
    "make": "BMW",
    "model": "M3",
    "year": 2009,
    "kilometers": 10030,
    "vehicleIdentificationNumber": "1234567890",
    "retailPrice": 100000.00,
    "costPrice": 50000.00,
    "vehicleAccessories": [
        {
            "vehicleId": 1,
            "accessoryId": 1,
            "accessory": {
                "id": 1,
                "description": "NEW ONE",
                "vehicleAccessories": []
            }
        },
        {
            "vehicleId": 1,
            "accessoryId": 2,
            "accessory": {
                "id": 2,
                "description": "NEW ONE",
                "vehicleAccessories": [
                    {
                        "vehicleId": 2,
                        "vehicle": {
                            "id": 2,
                            "registrationNumber": "123456",
                            "make": "BMW",
                            "model": "M3",
                            "year": 2009,
                            "kilometers": 10030,
                            "vehicleIdentificationNumber": "1234567890",
                            "retailPrice": 100000.00,
                            "costPrice": 50000.00,
                            "vehicleAccessories": [],
                            "vehicleImages": [],
                            "dtCreated": "2020-02-03T11:21:48.2245986",
                            "dtUpdated": "2020-02-03T11:21:48.2245554"
                        },
                        "accessoryId": 2
                    }
                ]
            }
        }
    ],
    "vehicleImages": [],
    "dtCreated": "2020-02-03T11:20:13.8890848",
    "dtUpdated": "2020-02-03T11:20:13.8890488"
}

Стол автомобиля:

public class Vehicle
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string RegistrationNumber { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
    public int Kilometers { get; set; }
    public string VehicleIdentificationNumber { get; set; }
    public decimal RetailPrice { get; set; }
    public decimal CostPrice { get; set; }
    public ICollection<VehicleAccessory> VehicleAccessories { get; } = new List<VehicleAccessory>();
    public ICollection<VehicleImage> VehicleImages { get; set; }
    public DateTime DTCreated { get; set; }
    public DateTime DTUpdated { get; set; }
}

Таблица аксессуаров

public class Accessory
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string Description { get; set; }
    public ICollection<VehicleAccessory> VehicleAccessories { get; } = new List<VehicleAccessory>();
}

Таблица привязки

public class VehicleAccessory
{
    public long VehicleId { get; set; }
    public Vehicle Vehicle { get; set; }

    public long AccessoryId { get; set; }
    public Accessory Accessory { get; set; }
}

Связь в контексте

builder.Entity<VehicleAccessory>()
            .HasKey(t => new { t.AccessoryId, t.VehicleId });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...