前臂的变化未保留
本文关键字:保留 变化 | 更新日期: 2023-09-27 18:29:48
VS 2105,MVC5 EntityFramework 6代码第一项目
我成功地填充了ViewModel的IEnumerable(也尝试了IQueryable),然后在foreach循环中进行修改。
如果我遍历foreach,字段就会更新,但当我检查IEnumerable中的单个ViewModel时,更改不会持久存在。
foreach:
foreach (var app in applVms) { app.Preliminary = true; }
(事实上,我正在对子表进行额外的查询,但我已经简化了这篇文章)
Preliminary在foreach之前和之后为false,但在foreach内部设置为true。
填充视图模型:
IEnumerable<ApplicationVm> applVms;
applVms = from app in _db.Applications
select new ApplicationVm { ... Preliminary = false, ... };
由于applVms
枚举表基于LINQ查询,因此它使用延迟执行,这意味着在枚举结果之前不会执行查询。
此外,每次在applVms
上枚举时,都会再次计算结果(查询将在另一次执行)。
当您第一次通过foreach
循环时,您得到了一组对象,然后修改了这些对象。
当您在applVms
上枚举以查看结果时(这是您第二次枚举),这为您提供了一个全新的对象集合(通过再次执行查询)。
要对此进行验证,请使用以下代码:
IEnumerable<ApplicationVm> applVms;
applVms = (from app in _db.Applications
select new ApplicationVm {Preliminary = false}).ToList();
//foreach here
这将枚举可枚举项一次,并将其放在列表中,以便将来的枚举将使用相同的集合。