0
我有一个名为GetAll()的方法在服务类中从实体框架返回实体。该方法如下:修改实体而不跟踪它
public ActionResult List()
{
var tasklogs = _timeLogService.GetAll()
.Select(l=>{
l.StartTime.Value.AddHours(1);
return l;
});
return PartialView(tasklogs);
}
我想在改性按照一些逻辑视图以显示数据,在本例中,我1小时添加到原来的日期。
问题是,如果我刷新页面,我会看到每个页面刷新的小时数增加,即GetAll()方法返回最后修改后的值,尽管它在数据库中不一样,即我不保存日期修改数据库,但GetAll返回修改日期。
我在某处读到这个工作,我需要分离实体。
所以,我的问题是,是否有更好的方法在服务层做到这一点,因为我必须在很多地方做到这一点。修改日期的根本原因是我使用db保存UTC中的日期,但是当我将它显示在视图中时,我将它转换为控制器操作中的本地时区。
我希望我说清楚。
感谢
一种解决方案是不直接在视图中使用EF实体。正是出于这个原因,你应该尽量让你的viewmodel类与数据访问类分开。但是,如果你必须这样做,使用'AsNoTracking',只是非常小心你的数据。 –
虽然这听起来不像“追踪”问题。您的代码不会将更新的数据保存在我可以看到的任何地方。很可能你会保留'DbContext'的单个实例,这会保持所有的实体加载,并且是一种反模式。对于每个执行的逻辑数据操作,您应该有一个'DbContext'的新实例。这通常意味着每个“ActionMethod”都有一个新的实例。 –
@BradleyUffner你是对的,我有单一的DbContext实例,因此也是这个问题。它在我根据请求更改为实例后解决。 –