ASP.NET Core 2.2 Entity Framework: получение подмножества данных без изменения контекста - PullRequest
0 голосов
/ 15 января 2019

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

Контроллер

[ServiceFilter(typeof(LogUserActivity))]
public class CabinsController : Controller
{
    private readonly IBaseRepository _repo;

    public CabinsController(IBaseRepository repo)
    {
        _repo = repo;
    }

    public IActionResult GetCabins()
    {
        return Ok(_repo.GetCabins());

        // upon completing the action, the LogUserActivity 
        // filter saves changes to the database.
    }
}

Репозиторий

public List<Cabin> GetCabins() 
{
    // retrieve list of all cabins
    var cabins = _context.Cabins.ToList();

    // only show current occupants of the cabins
    foreach (var cabin in cabins) {
        cabin.occupants = 
            cabin.occupants.Where(o => 
                o.StartDate <= DateTime.UtcNow && 
                o.EndDate >= DateTime.UtcNow).ToList();
    }

    return cabins;
}

Однако это меняет _context и базу данных, к которой он подключен. Он удаляет все occupants, которые не являются текущими.

Как я могу получить подмножество свойства объекта без изменения источника данных?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

После присвоения

var cabins = _context.Cabins.ToList();

Вы назначаете новых жителей в объекте данных _context. И позже, если вы напишите

_context.SaveChanges();

сохраняет БД. Попробуйте это

public List<Cabin> GetCabins() 
{
    // retrieve list of all cabins
    var cabins = _context.Cabins.ToList();
    List<Cabins> cabintemp= new List<Cabins>();

    // only show current occupants of the cabins
    cabintemp.occupants=cabins.occupants.Where(o => 
                o.StartDate <= DateTime.UtcNow && 
                o.EndDate >= DateTime.UtcNow)

    }

    return cabintemp;
}

Используйте cabintemp.

0 голосов
/ 15 января 2019

Используйте .toList () для объекта cabins, который создаст копию для использования в цикле:

 foreach (var cabin in cabins.toList()) {

См. ToList () - Создает ли он новый список? для получения дополнительной информации.

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