我现在有一个包含两部分的应用程序
幕后的逻辑包括一些项目,例如存储库-数据访问是通过一个工作单元来实现的。 Viewer本身是带有基础ViewModel的WPF表单。
ViewModel包含一个ObservableCollection,这是我的Viewer的数据源。
现在的问题是-我如何每隔几分钟就能检索一次数据库数据?我知道以下两个问题:
如果需要,我将添加一些代码,但目前我认为这根本没有帮助。
编辑:
public IEnumerable<Request> GetAllUnResolvedRequests() {
return AccessContext.Requests.Where(o => !o.IsResolved);
}
这段代码不会获取最新数据-我手动编辑一些行(将IsResolved设置为true),但是此方法仍然可以检索到该行。
编辑2:
编辑3:
var requests = AccessContext.Requests.Where(o => o.Date >= fromDate && o.Date <= toDate).ToList();
foreach (var request in requests) {
AccessContext.Entry(request).Reload();
}
return requests;
最终问题:
上面的代码“解决了”问题-但在我看来,这并不干净。还有另一种方法吗?
最佳答案
当您访问数据库上的实体时,将缓存该实体(并跟踪该实体以跟踪您的应用程序所做的更改,直到您指定AsNoTracking为止)。
这有一些问题(例如,性能问题,因为缓存增加了,或者您看到的是旧版本的实体)。
因此,在使用EF时,您应该使用工作单元模式(即,应该为每个工作单元创建一个新的上下文)。
您可以看一下这篇Microsoft文章,以了解如何实现工作单元模式。
http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
在您的情况下,使用Reload并不是一个很好的选择,因为该应用程序不可扩展。对于每次重新加载,您都在查询数据库。如果只需要返回所需的实体,最好的方法是创建一个新的上下文。
public IEnumerable<Request> GetAllUnResolvedRequests()
{
return GetNewContext().Requests.Where(o => !o.IsResolved).ToList();
}
关于c# - 如何...显示数据库中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38921303/