问题描述
|
当我在通用SQL SERVER DB前面运行我的应用程序的2个实例时,我有以下行为:
每次添加或删除对象时,另一个应用程序都会看到它
每次对对象进行更新时,直到我关闭并打开应用程序,对方才会看到它
我正在使用WPF绑定和EF4
有什么线索吗?
谢谢
乔恩
解决方法
我认为您正在重用上下文,不是吗? EF不会自动加载更改。如果您运行查询,然后修改数据库中的数据,然后再次运行相同的查询,您将获得与第一个查询相同的结果,仅添加新记录。这就是EF的行为方式,这种行为在ORM工具中非常重要。如果要强制上下文重新加载数据并丢弃应用程序中的状态(=所有未保存的更改将丢失),则必须使用
MergeOption.OverwriteChanges
(此处为示例)运行查询或使用RefreshMode.StoreWins
调用call1ѭ方法。
,您的应用正在内存中维护状态,即数据的副本。
当您在应用程序的一个实例中更改数据并将数据保存到数据库时,它对应用程序的第二个实例中的内存没有影响。
为了使其在第二个实例中显示,您必须从数据库中获取数据。
我认为您正在做的是刷新数据。 EF所做的是说“我有这5行,服务器上的此数据是否有变动”。只是刷新以前已检索的行。
您需要使用用于在应用程序启动时加载数据的代码。如果要重用dbContext,还必须小心。