Asp.net mvc 4 使用Breezejs和MVC Web API存储和同步本地数据
我想使用breezejs api在本地存储(indexdb或websql)中存储数据,还想将本地数据与sql server同步 但我没能做到这一点,也找不到使用breezejs、knockout和MVCAPI的此类应用程序的示例应用程序 我的要求是: 1) 如果internet可用,数据将使用mvc web api来自sql server 2) 如果internet关闭,应用程序将从缓存的本地存储(indexdb或websql)检索数据 3) 一旦打开internet,本地数据将同步到sql server 请让我知道我是否可以通过使用breezejs api来达到这个要求 如果是,请给我提供一些链接和样品 如果没有,我们可以使用什么其他方法来实现此类要求 谢谢Asp.net mvc 4 使用Breezejs和MVC Web API存储和同步本地数据,asp.net-mvc-4,local-storage,breeze,asp.net-web-api,Asp.net Mvc 4,Local Storage,Breeze,Asp.net Web Api,我想使用breezejs api在本地存储(indexdb或websql)中存储数据,还想将本地数据与sql server同步 但我没能做到这一点,也找不到使用breezejs、knockout和MVCAPI的此类应用程序的示例应用程序 我的要求是: 1) 如果internet可用,数据将使用mvc web api来自sql server 2) 如果internet关闭,应用程序将从缓存的本地存储(indexdb或websql)检索数据 3) 一旦打开internet,本地数据将同步到sql s
请帮助我满足此要求。您可以这样做,但我建议只使用本地存储。基本上,每次从服务器读取或保存到服务器时,都会导出实体并将其保存到本地存储。然后,当需要读入数据时,如果无法访问服务器,则从localstorage读取数据,并使用importentities将其读入管理器,然后在本地查询
function getData() {
var query = breeze.EntityQuery
.from("{YourAPI}");
manager.executeQuery.then(saveLocallyAndReturnPromise)
.fail(tryLocalRestoreAndReturnPromise)
// If query was successful remotely, then save the data in case connection
// is lost
function saveLocallyAndReturnPromise(data) {
// Should add error handling here. This code
// assumes tis local processing will be successful.
var cacheData = manager.exportEntities()
window.localStorage.setItem('savedCache',cacheData);
// return queried data as a promise so that this detour is
// transparent to viewmodel
return Q(data);
}
function tryLocalRestoreAndReturnPromise(error) {
// Assume any error just means the server is inaccessible.
// Simplified for example, but more robust error handling is
// warranted
var cacheData = window.localStorage.getItem('savedCache');
// NOTE: should handle empty saved cache here by throwing error;
manager.importEntities(cacheData); // restore saved cache
var query = query.using(breeze.FetchStrategy.FromLocalCache);
return manager.executeQuery(query); // this is a promise
}
}
这是一个简单的代码框架。您应该检查捕获和处理错误,添加一个断开连接的函数来确定连接,等等
如果您在本地进行编辑,那么还有一些问题需要解决。每次更改缓存时,都需要导出整个缓存或更改(可能取决于缓存的大小)。当存在连接时,您需要首先测试本地更改,如果找到,则在重新查询服务器之前将其保存到服务器。此外,脱机时进行的任何模式更改都会使问题变得非常复杂,因此请注意这一点
希望这有帮助。健壮的实现有点复杂,但这应该给您一个起点。这一行是强制性的。window.localStorage.setItem('savedCache',data);Breezejs在哪里保存缓存数据?我们是否明确需要保存在本地存储中?否。Breeze单独保存其缓存。该行确保当您再次启动应用程序时,如果没有与服务器的连接,您可以使用来自服务器的最新数据。如果不关闭选项卡或浏览器,则不需要保存到本地存储,只需从缓存工作即可。我的经验是,无论是否连接到服务器,最终用户在启动网页时总是希望数据在那里。