我有一个独立的控制台应用程序,可定期轮询数据库以进行更改。
我想确保是否有人从网络前端对Db进行了更改,控制台应用会获得更新的实体列表。
我一直在查看.Reload()方法,但这似乎只适用于单个实体。我希望我在存储库层上的select语句获得刷新列表,以及列表中的任何项目更改。有效地刷新该特定实体的整个上下文。
如何在不创建新环境的情况下实现这一目标?不创建新上下文的原因是我希望能够进行单元测试并将repo注入到使用服务中,而无需在服务中创建具体实现。
答案 0 :(得分:0)
为什么你需要长寿?你没有提到任何正当理由。您可以为您的服务注入工厂而不是上下文。 Factory将隐藏上下文创建,您的服务将能够根据需要创建任意数量的上下文。长期生活环境是有问题的,应该避免。
无论如何,如果你需要刷新一些数据,你可以更改MergeOption
集合(或ObjectQuery
):
context.MyEntitySet.MergeOption = MergeOption.OverwriteChanges;
var data = context.MyEntitySet.ToList();