5

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

我的问题是:有没有办法告诉 objectcontext 总是从数据库中加载数据,无论是在洞 objectcontext 上还是针对特定查询?

/问候文布拉德

4

4 回答 4

2

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

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

于 2010-10-06T20:38:38.560 回答
2

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

于 2016-09-20T12:45:38.980 回答
1

每当你运行类似的东西时

context.Entities.FirstOrDefault()

或针对上下文的任何查询,数据实际上是从数据库中获取的,所以你不应该有问题。

ObjectContext在 webapp 中的寿命是多久?ObjectContext 是一个 UnitOfWork,因此应该只创建它以获取/写入/更新数据并在之后快速处理。你可以在这里找到一个类似的问题:

刷新 ObjectContext 或重新创建它以反映对数据库所做的更改?

于 2010-10-06T11:04:58.880 回答
0

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

' queries from memory    
context.Entities.FirstOrDefault()

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

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

于 2014-06-30T09:44:02.333 回答