为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
不负相思意 2022-07-23 16:31:45
我正在尝试返回对象列表,但仅包含该对象的一个属性的子集。控制器[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 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

在小屋对象上使用 .toList() 将创建一个副本以在循环中使用:

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

请参阅ToList()——它是否创建一个新列表?了解更多信息。


查看完整回答
反对 回复 2022-07-23
?
桃花长相依

TA贡献1860条经验 获得超8个赞

分配后


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;

}

使用小屋温度。


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信