gpt4 book ai didi

entity-framework-4 - 如何强制EF Code First查询数据库?

转载 作者:行者123 更新时间:2023-12-04 07:53:22 24 4
gpt4 key购买 nike

我有一个管理规则集合的站点和一个单独的 Windows 表单应用程序,根据数据库中的规则进行文件级别更改。

这两个应用程序对 EF Code First DbContext 使用相同的库,但每个应用程序都在实例化自己的上下文副本。

问题是,上下文的每个运行版本都不知道其他版本所做的更改。例如。如果我更改站点上的规则,表单应用程序仍具有以前的版本。

我知道我可能会采用这种错误的方式,并且应该通过 JSON/REST 从站点到表单应用程序进行某种数据访问,但由于其他原因我不想这样做。

有没有办法在上下文中“禁用缓存”并强制每个查询命中数据库?

最佳答案

不,没有办法禁用缓存。您必须手动设置每个查询以重新加载数据。该功能不适用于 DbContext API => 您必须使用 ObjectContext API。

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
ObjectSet<YourEntity> set = objectContext.CreateObjectSet<YourEntity>();
set.MergeOption = MergeOption.OverwriteChanges;
var query = from x in set where ... select x;

或者更简单的场景:如果可能,使用更好的上下文管理,而不是在相同的上下文上运行查询,我们使用一个新的。

顺便提一句。在 winform 应用程序中公开服务并由网站使用它的想法是错误的。您需要第三个服务应用程序(托管在 Web 服务器上或作为 Windows 服务),并且网站和 winform 应用程序都将通过该新应用程序访问数据库。 EF 只会出现在新的应用程序中。

编辑:

如果您的 WinForm 应用程序不对从数据库加载的数据进行更改,您还可以使用以下命令:
var query = from x context.YourEntities.AsNoTracking() where ... select x;

这将关闭实体的内部更改跟踪,它还应该强制 EF 每次重新加载实体,但这会使保存更改变得更加困难。

关于entity-framework-4 - 如何强制EF Code First查询数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com