EF 查询只读 Iqueryable
本文关键字:Iqueryable 只读 查询 EF | 更新日期: 2023-09-27 18:31:04
我有几十个不同的视图,在某些视图上,来自数据库的数据必须在向用户显示之前进行操作。
例如:
var students = _repository.Students.Select(c => { c.StartDate = FixDateToCurrentYear(c.StartDate ); c.EndDate = FixDateToCurrentYear(c.EndDate); return c; }).ToList();
所以基本上我现在有一个变量,其中Students
StartDate
和EndDate
已被某种逻辑固定,目前无关紧要。
这里的问题是,每当在某个地方调用 SaveChanges() 函数时,学生更改的日期也会保存到数据库中。
我只想在特定视图中对逻辑使用更改的日期。我该如何处理?
我听说过.AsNoTracking();
但这必须直接放在 DbSet 项中,但我想在控制器端处理它,可以吗?
首先从数据库中拉出学生,然后选择匿名类型。EF 不知道如何跟踪这方面的更改。
var students =
_repository.Students.ToList()
.Select(s =>
new { StartDate = FixDateToCurrentYear(c.StartDate),
EndDate = FixDateToCurrentYear(c.EndDate),
Student = s });
我能想到的最快的事情是在向用户显示修复时执行修复,例如在 Razor 中:
@FixDateToCurrentYear(student.StartDate)
这样,您实际上并没有更改值,而只是更改了它的显示方式。
如果你需要做的不仅仅是显示,你将需要创建一个分部好友类,添加一个新属性并修改其get方法:
public partial class Student
{
DateTime StartDateComputed {
get
{
return FixDateToCurrentYear(StartDate);
}
set;
}
}
现在,使用 StartDateComputed 而不是 StartDate,并且对 EndDate 也是如此。