将数据从db重新加载到IQueryable <t>而不重写表达式</t>

时间:2012-08-12 06:56:15

标签: entity-framework entity-framework-4.1 iqueryable

  

可能重复:
  DbContext's internal caching (?)

我在DbContext中有一个IQueryable和一个ViewModelBase的实例,它从BootStrapper填充,而IQueryable需要从数据库中重新加载几个我希望通过调用一些简单的方法来实现它,而无需关心查询表达式是什么。

简单来说:

我想将数据加载到IQueryable<T>而不重写我的表达式和工具:

1 =&gt; IQueryable

2 =&gt; DbContext

的实例

当我更改数据库中的数据并尝试IQueryable.ToList()时,结果不会更新。

IQueryable<Person> ViewModelDataContext;
ViewModelDataContext = repository.GetAll<Person>();
var x = ViewModelDataContext.ToList();
//Some changes into database
repository = new Repository();
var y = ViewModelDataContext.ToList();
//But as result, the x is exactly returns the same result as y and I'd like the y to be updated after  database changes.

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

最有可能的问题是,实体框架每次都会(正确地)返回相同的实体实例。这是ORM的一个重要特征。没有您的许可,它会使用数据库中的新值覆盖其字段。如果这样做,将导致您的应用程序中的虚假状态损坏和非本地副作用。

如果您要使用此方法加载非实体类型,它将起作用。或者阅读有关合并选项的信息。