我有这个applikation实际上是两个应用程序,一个Web应用程序和一个控制台应用程序。控制台应用程序用作Windows计算机上的计划任务,每天执行3次以执行某些重复工作。两个应用程序都使用相同的模型和存储库,该存储库位于单独的项目库(类库)中。问题是如果控制台应用程序需要对数据库进行som更改,它会更新模型实体并将更改保存到数据库但是当发生这种情况时,webbapplication中的上下文不会意识到这一点,因此对象上下文不会刷新新的/更新的数据和应用程序的用户无法看到更改。
我的问题是:有没有办法告诉objectcontext始终从数据库加载数据,无论是在hole objectcontext还是特定查询?
/关心Vinblad
答案 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,这是我的原生语言:)