我有几十个不同的视图,有些数据来自数据库,在显示给用户之前必须进行操作。
例如:
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项目中,但是我想在控制器端处理它,是否可能?
答案 0 :(得分:4)
首先从数据库中拉出学生,然后选择一个匿名类型。 EF不知道如何跟踪变化。
var students =
_repository.Students.ToList()
.Select(s =>
new { StartDate = FixDateToCurrentYear(c.StartDate),
EndDate = FixDateToCurrentYear(c.EndDate),
Student = s });
答案 1 :(得分:0)
我能想到的最快的事情是在您向用户显示修复时执行修复,例如在剃刀:
@FixDateToCurrentYear(student.StartDate)
通过这种方式,你实际上并没有改变价值,只是改变它的显示方式。
如果您需要做的不仅仅是显示,您需要创建部分好友类,添加新属性并修改其get方法:
public partial class Student
{
DateTime StartDateComputed {
get
{
return FixDateToCurrentYear(StartDate);
}
set;
}
}
现在,使用StartDateComputed代替StartDate,使用相同的EndDate。