EF查询只读Iqueryable

时间:2014-11-20 10:55:09

标签: c# .net entity-framework entity-framework-6 iqueryable

我有几十个不同的视图,有些数据来自数据库,在显示给用户之前必须进行操作。

例如:

var students = _repository.Students.Select(c => { c.StartDate = FixDateToCurrentYear(c.StartDate ); c.EndDate = FixDateToCurrentYear(c.EndDate); return c; }).ToList();

所以基本上我现在有一个变量,其中Students StartDateEndDate被某些逻辑修复,这在目前是不相关的。

这里的问题是,无论什么地方调用SaveChanges()函数,学生的更改日期也会持久保存到数据库。

我只想在特定视图中使用更改日期作为逻辑。我怎么能处理这个?

我听说过.AsNoTracking();但是这必须直接放到DbSet项目中,但是我想在控制器端处理它,是否可能?

2 个答案:

答案 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。