Я пытаюсь загрузить связанный модал в Entity Framework Core, но по какой-то причине загружается вложенная коллекция, когда я не просил об этом в моем Include()
вызове.
Вот мои двамодели -
Driver.cs
public partial class Driver : IBaseEntity
{
public short DriverId { get; set; }
public string Surname { get; set; }
public string Initials { get; set; }
public byte DriverStatusTypeId { get; set; }
public DriverStatusType DriverStatusType { get; set; }
}
DriverStatusType.cs
public partial class DriverStatusType
{
public DriverStatusType()
{
Drivers = new HashSet<Driver>();
}
public byte DriverStatusTypeId { get; set; }
public string DriverStatusTypeName { get; set; }
public string Description { get; set; }
public ICollection<Driver> Drivers { get; set; }
}
DriversService.cs
public class DriverService : IDriverService
{
public DriverService(MyContext context)
{
Context = context;
}
public MyContext Context { get; }
public async Task<IEnumerable<Driver>> GetAllDrivers()
{
var drivers = await Context
.Drivers
.Include(d => d.DriverStatusType)
.toListAsync();
return drivers;
}
public async Task<Driver> GetDriverById(int id)
{
var driver = await Context
.Drivers
.Include(d => d.DriverStatusType)
.Where(d => d.DriverId == id)
.FirstOrDefaultAsync();
return driver;
}
}
Теперь, когда я вызываю метод GetDriverById(int id)
из моего контроллера, я получаю то, что ожидаю -
{
"driverId": 1,
"surname": "Stark",
"initials": "T",
"driverStatusTypeId": 2,
"driverStatusType": {
"driverStatusTypeId": 2,
"driverStatusTypeName": "Available",
"description": "This driver is available",
"drivers": []
}
}
Однако метод GetAllDrivers()
возвращаетсявложенная коллекция drivers
, которая означает, что данные, которые я получаю, огромна -
[
{
"driverId": 1,
"surname": "Stark",
"initials": "T",
"displayText": "Tony Stark",
"driverStatusTypeId": 2,
"driverStatusType": {
"driverStatusTypeId": 2,
"driverStatusTypeName": "Available",
"description": "This driver is available",
"drivers": [
{
"driverId": 2,
"surname": "Rogers",
"initials": "S",
"driverStatusTypeId": 2
},
{
"driverId": 3,
"surname": "Romanoff",
"initials": "N",
"driverStatusTypeId": 2
},
{
"driverId": 4,
"surname": "Banner",
"initials": "B",
"driverStatusTypeId": 2
},
...
Я думал, что идея быстрой загрузки заключалась в том, чтобы включать только те модели, которые вы указали в операторе включения, но кажется,это не вариант.Может ли кто-нибудь объяснить, что здесь происходит?