2012-08-01 53 views
3

我有一个视图,其中包含来自多个表的数据。实体框架中的视图将不会更新

当我调用该视图时,结果被加载到内存中并存储。在对应该影响视图的其他表进行一些更改后,视图不知道有关更改的任何信息。

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

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

如果我能让视图知道正在进行的更改,则更好。这是否可以通过实体配置实现,也许可以使用HasRequired()方法映射FK?

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

+0

您是否将EF与WCF结合使用?你有什么样的应用程序? – 2012-08-01 12:23:35

+0

不,这是一个WPF应用程序。我调试了代码,所以我知道从EF返回的实际数据。 – 2012-08-01 12:27:41

+0

但是你是否直接与dbcontext交谈? – 2012-08-01 12:32:35

回答

6

当您对视图使用AsNoTracking()扩展方法执行Linq查询时。这将迫使EF始终使用数据库中的数据,而不是记忆:

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

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

+0

是的,它只是工作。 – 2012-08-01 13:06:56