确保Entity框架始终​​从数据库中读取?

时间:2010-10-06 10:44:59

标签: entity-framework entity-framework-4 objectcontext

我有这个applikation实际上是两个应用程序,一个Web应用程序和一个控制台应用程序。控制台应用程序用作Windows计算机上的计划任务,每天执行3次以执行某些重复工作。两个应用程序都使用相同的模型和存储库,该存储库位于单独的项目库(类库)中。问题是如果控制台应用程序需要对数据库进行som更改,它会更新模型实体并将更改保存到数据库但是当发生这种情况时,webbapplication中的上下文不会意识到这一点,因此对象上下文不会刷新新的/更新的数据和应用程序的用户无法看到更改。

我的问题是:有没有办法告诉objectcontext始终从数据库加载数据,无论是在hole objectcontext还是特定查询?

/关心Vinblad

4 个答案:

答案 0 :(得分:2)

我认为您不应该在Web应用程序中遇到此问题。应该为每个请求创建Web应用程序中的ObjectContext,因此只有在更新期间处理请求才会受到影响。

无论如何,很少有方法可以强制ObjectContext重新加载数据。查询和加载函数允许传递MergeOption,它应该能够覆盖当前数据。但最有趣的应该是刷新方法,尤其是this application

答案 1 :(得分:1)

每当你运行类似

的东西时
context.Entities.FirstOrDefault()

或针对上下文的任何查询,数据实际上是从数据库中提取的,因此您不应该遇到问题。

您在网络应用中的ObjectContext有效期是多少? ObjectContext是一个UnitOfWork,因此应该只创建它来获取/写入/更新数据并在之后快速处理。 你可以在这里找到一个类似的问题:

Refresh ObjectContext or recreate it to reflect changes made to the database?

答案 2 :(得分:1)

通过使用DbSet,您还可以使用.AsNoTracking()方法。

答案 3 :(得分:0)

FWIW,在查询中创建一个新的(匿名)对象也会强制往返数据库:

' queries from memory    
context.Entities.FirstOrDefault()

' queries from db
context.Entities.Select(Function(x) New With {p.ID, p.Name}).FirstOrDefault()

请原谅VB,这是我的原生语言:)