我们正在构建客户端 - 服务器应用程序。客户端是使用实体框架和SQL Server CE作为数据库的WPF应用程序。服务器是一个简单的Web服务。
客户端使用SQL Server CE存储数据,但是我们会以固定的时间间隔从客户端向服务器发送数据。我们这样做是因为客户端可以完全脱机工作,因此只要将其在线数据发送到服务器即可。我们注意到的是,当用户保存一些数据并且事务被提交时,数据不会立即存在于数据库中。
我知道这是因为SQL Server CE的工作方式以及数据以特定间隔推送到数据库文件。它可以通过设置刷新间隔= 1来改变,但是我认为它不能正常工作或者我们做错了什么,这当然是可能的。因为当事务在一个线程中提交并且我们在线程中读取数据库并将数据发送到服务器时,我们有时(这不是经常,但对我们来说这是完全不可接受的)从SQL Server CE缓存中获取数据。
如果发生这种情况并且客户端将数据发送到服务器,同时应用程序崩溃或用户关闭它,我们将客户端和服务器数据库置于完全不一致的状态。这种行为是我们的错误,因为我们没有等待发送线程在app关闭完成并且连接没有正确处理。
然而,我仍然不相信这是否足够。有没有办法100%确定所有提交的事务是否真的保存在SQL Server CE数据库文件中?