Я использую. 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 });