Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 确保实体框架始终从数据库中读取数据?_Entity Framework_Entity Framework 4_Objectcontext - Fatal编程技术网

Entity framework 确保实体框架始终从数据库中读取数据?

Entity framework 确保实体框架始终从数据库中读取数据?,entity-framework,entity-framework-4,objectcontext,Entity Framework,Entity Framework 4,Objectcontext,我的应用程序实际上是两个应用程序,一个Web应用程序和一个控制台应用程序。控制台应用程序用作windows计算机上的计划任务,每天执行3次以完成一些重复性工作。这两个应用程序都使用相同的模型和存储库,该模型和存储库位于单独的projekt(类库)中。问题是,如果console应用程序需要对数据库进行som更改,它会更新模型实体并将更改保存到数据库,但当这种情况发生时,WebB应用程序中的上下文不知道这一点,因此不会使用新的/更新的数据刷新对象上下文,并且应用程序的用户无法看到变化 我的问题是:有

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

我的问题是:有没有一种方法可以告诉objectcontext始终从数据库加载数据,无论是在objectcontext上还是针对特定查询


/无论何时,只要您运行类似

context.Entities.FirstOrDefault()
或者针对上下文的任何查询,数据实际上是从数据库中获取的,因此您不应该有问题

您在webapp中的
ObjectContext
生命周期是什么?ObjectContext是一个UnitOfWork,因此应该只创建它来获取/写入/更新数据,并在之后快速处理。 您可以在此处找到类似的问题:


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

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

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

' queries from memory    
context.Entities.FirstOrDefault()

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

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

通过使用数据库集,您还可以使用.AsNoTracking()方法。

这不是真的。如果运行查询,请在DB中修改数据,然后在不接收新数据的同一上下文中再次运行查询。ObjectContext实现了几种模式——这一种称为Identity Map,这意味着同一密钥的实体只加载一次。感谢Yakimych提供的信息,您提供的链接让我走上了正确的方向,结果证明我需要Unity中对PerWebRequest的支持(我使用了这个实现,它似乎可以工作:)@拉迪斯拉夫-谢谢你的更正@文布拉德-很高兴我能帮忙;)有没有计划修正这个答案?这其实是个好答案。只需添加.AsNoTracking()作为查询的一部分,实体框架将不依赖于对象的内存实例。