breezeJS:什么是资源?有多种资源吗?
breezeJS: what is a resource? are there multiple kinds of resources?
我正在尝试将breezeJS库添加到我的Angular项目中。我对微风的资源感到困惑:
查看API,我看到MetaDataStore
有一个方法getEntityTypeNameForResourceName
,我假设从"资源名称"返回一个适当的实体类型名称,我假设这是一个可以给实体的昵称。我认为它的操作类似于:
metaStore.getEntityTypeNameForResourceName('users') // returns USR where USR is the table name in the db
然而,在API文档中,我看到SaveOptions对象在其构造函数中接受一个可选的[resourceName]参数。我假设这是处理保存的服务URL或控制器方法?
这是两种不同的"资源"吗?我的解释是否正确?
有点相同,有点不同。
查询资源名称
getEntityTypeNameForResourceName('users')
显示与查询资源名 'users'相关联的EntityType
名称。在您的情况下,EntityType
名称是'USR',我打赌是服务器上的类的名称以及客户端上的EntityType
的名称。
我不知道你是如何创建元数据的,所以我不能确定'users'资源名是如何产生的。如果您从EF DbContext
生成元数据,那么查询资源名'users'很可能与相应的DbSet
的名称匹配。这就是微风。净假设。
我猜你也用这样的表达式来查询用户:
var query = breeze.EntityQuery.from('users') ...
'users'
参数就是我们在breeze中所说的"查询资源名"。因为大多数人只提供"查询资源名称",所以我们倾向于直接说"资源名称"。
从HTTP的角度来看,对应的服务器端资源是微风dataServiceName和这个"资源名"的连接。如果您使用dataServiceName "api"创建EntityManager
,则HTTP资源为~/api/users
。
查询也可以直接指向缓存。您可以使用
在缓存中获取所有用户breeze.EntityQuery.from('users').using(manager).executeLocally();
如果您想使用EntityType
名称从缓存中读取,该怎么办?
breeze.EntityQuery.from('USR').using(manager).executeLocally(); // fails
这不起作用,因为您没有说EntityType
名称也是查询资源名称。可以将其注册为元数据,使其成为备用资源名称。
metaStore.setEntityTypeForResourceName ( 'USR', 'USR'); // resourceName, entityTypeName
metaStore.getEntityTypeNameForResourceName('USR'); // returns 'USR'
breeze.EntityQuery.from('USR').using(manager).executeLocally(); // now it works
这也返回缓存的用户:-)
metaStore.setEntityTypeForResourceName ( 'Foo', 'USR' ); // resourceName, entityTypeName
metaStore.getEntityTypeNameForResourceName('Foo'); // returns 'USR'
breeze.EntityQuery.from('Foo').using(manager).executeLocally();
保存资源名称
默认情况下,Breeze EntityManager.saveChanges
方法将变更集有效负载发送到dataServiceName + "SaveChanges"端点(例如~/api/SaveChanges
)
假设你的服务器端web api控制器接受POST请求到那个URL,并实现轻松的"SaveChanges"协议。走在-。. NET EntityContextProvider
公开了这个方法,并观察到协议和大多数人将该方法连接到他们的微风控制器的SaveChanges
方法。
单词"SaveChanges"是默认的保存资源名。很少有开发人员考虑到这一点,除非他们需要多个端点来保存实体更改。
您可以通过指定另一个保存资源名来建立另一个保存端点。例如
var saveOptions = new breeze.SaveOptions({resourceName: 'SpecialSave'});
manager.saveChanges(null, saveOptions); // save all pending changes to ~/api/SpecialSave
在这种情况下,你期望你的服务器端web api控制器实现一个SpecialSave
方法与特殊的逻辑为您的用例。
你为什么要这样做?也许你会在服务器上的SaveChanges
方法中编写保护逻辑来拒绝对用户的更改,并将该任务专门委托给受适当授权规则保护的SpecialSave
方法。
您可以根据需要编写任意多的这些可选保存端点。
总结显然有两种微风资源名称-查询和保存。他们的目的不同。它们的相似之处在于它们使EntityManager
将HTTP请求发送到一个URL,该URL是dataServiceName和资源名称的连接。
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- WebResources嵌入式资源和Javascript如何在另一个嵌入式资源中使用它们
- 如何在构建node-webkit应用程序后获取外部资源
- ADF:有条件地加载javascript资源
- Javascript嵌入式图像资源
- 内容安全策略:页面's设置阻止加载资源
- 用于查询错误转换的角度资源返回列表
- 未能在Laravel中加载资源
- LINK rel=子资源用于什么
- 如何在JS文件中获取资源(.resx)字符串
- 我可以在Nodewebkit中保护javascript以外的资源吗
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- js文件未加载js控制台say's”;不允许加载本地资源”;
- "资源不足错误“;当从Chrome控制台重复发出ajax请求时
- UIWebview赢得't通过基本身份验证加载动态加载的资源(通过jQuery mobile)
- 拖动&删除Fullcalendar.io资源-更新视图
- Casperjs等待资源
- AngularJS多资源调用,只处理最后一个
- nodeJS:使用(fs)尝试访问静态资源,但收到404错误
- breezeJS:什么是资源?有多种资源吗?