ASP.NET Core 2.2 Entity Framework:在不改变上下文的情况下获取数

我正在尝试返回对象列表,但仅包含该对象的一个属性的子集。


控制器


[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不是最新的。


如何在不更改数据源的情况下检索对象属性的子集?


不负相思意
浏览 117回答 2
2回答

至尊宝的传说

在小屋对象上使用 .toList() 将创建一个副本以在循环中使用:&nbsp;foreach&nbsp;(var&nbsp;cabin&nbsp;in&nbsp;cabins.toList())&nbsp;{请参阅ToList()——它是否创建一个新列表?了解更多信息。

桃花长相依

分配后var cabins = _context.Cabins.ToList();您在 _context 数据对象中分配新的占用者。后来,如果你写_context.SaveChanges();它节省了数据库。试试这个public List<Cabin> GetCabins()&nbsp;{&nbsp; &nbsp; // retrieve list of all cabins&nbsp; &nbsp; var cabins = _context.Cabins.ToList();&nbsp; &nbsp; List<Cabins> cabintemp= new List<Cabins>();&nbsp; &nbsp; // only show current occupants of the cabins&nbsp; &nbsp; cabintemp.occupants=cabins.occupants.Where(o =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; o.StartDate <= DateTime.UtcNow &&&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; o.EndDate >= DateTime.UtcNow)&nbsp; &nbsp; }&nbsp; &nbsp; return cabintemp;}使用小屋温度。
打开App,查看更多内容
随时随地看视频慕课网APP