4

我有一个视图,其中包含来自多个表的数据。

当我调用该视图时,结果会加载到内存中并存储。在我对其他应该影响视图的表进行一些更改后,视图对这些更改一无所知。

因此,当我再次调用该视图时,例如 Get() 方法,EF 返回存储数据的值。

我当然想要更新的数据。如何强制视图从数据库而不是内存中获取数据?还是有更好的策略?

如果我可以让视图知道所做的更改,那就更好了。这是否可以通过实体配置来实现,也许通过使用 HasRequired() 方法来映射 FK?

编辑: 我正在使用存储库和工作单元模式。所以我不是每次都创建和处理新的上下文。请考虑这一点。

4

1 回答 1

9

当您在视图上执行 Linq 查询时,请使用AsNoTracking()扩展方法。这将强制 EF 始终使用数据库中的数据而不是内存:

var result = from x in context.ViewSet.AsNoTracking()
             select x;

EF 不会为您处理任何自动数据刷新。

于 2012-08-01T12:49:43.757 回答