breezeJS:什么是资源?有多种资源吗?
breezeJS: what is a resource? are there multiple kinds of resources?
我正在尝试将 breezeJS 库添加到我的 Angular 项目中。我对 breeze 的资源感到困惑:
查看 API 我看到 MetaDataStore
有一个方法 getEntityTypeNameForResourceName
我假设 returns 来自 "resource name" 的正确实体类型名称我认为这是一个可以给实体的昵称。我认为它的运行方式类似于:
metaStore.getEntityTypeNameForResourceName('users') // returns USR where USR is the table name in the db
然而,在 API 文档中,我看到 SaveOptions object 在其构造函数中采用了可选的 [resourceName] 参数。我假设这是处理保存的服务 URL 或控制器方法?
这是两种不同的"resources"吗?我的解释是否正确?
提前致谢。
有些相同,有些不同。
查询资源名称
getEntityTypeNameForResourceName('users')
显示与 查询资源名称、'users' 关联的 EntityType
名称。在您的情况下,EntityType
名称是 'USR',我敢打赌这是服务器 class 的名称 以及客户端上的 EntityType
.
我不知道您是如何创建元数据的,所以我无法确定 'users' 资源名称是如何产生的。如果您从 EF DbContext
生成元数据,则查询资源名称 'users' 可能与相应 DbSet
的名称相匹配。这就是 Breeze-on-.NET 的假设。
我还猜测您使用类似这样的表达式查询用户:
var query = breeze.EntityQuery.from('users') ...
'users'
参数就是我们所说的breeze中的"query resource name"。因为大多数人只提供 "query resource name",我们倾向于只说 "resource name".
从 HTTP 角度来看,相应的 server-side 资源是 breeze dataServiceName 和此 "resource name" 的串联。如果您使用数据服务名称 "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
这 returns 也缓存了用户:-)
metaStore.setEntityTypeForResourceName ( 'Foo', 'USR' ); // resourceName, entityTypeName
metaStore.getEntityTypeNameForResourceName('Foo'); // returns 'USR'
breeze.EntityQuery.from('Foo').using(manager).executeLocally();
保存资源名称
默认情况下,Breeze EntityManager.saveChanges
方法 POST 将 change-set 负载发送到 dataServiceName + "SaveChanges" 端点(例如 ~/api/SaveChanges
)
假设您的 server-side 网络 api 控制器接受 POST 对 URL 的请求并实施 breeze "SaveChanges" 协议. breeze-on-.NET EntityContextProvider
公开此方法并观察该协议,大多数人将该方法连接到他们的 breeze 控制器的 SaveChanges
方法。
单词"SaveChanges"是默认保存资源名称。很少有开发人员考虑这一点,他们也不应该考虑这一点,除非他们需要多个端点来保存实体更改。
您可以通过指定备用保存资源名称来建立备用保存端点。例如
var saveOptions = new breeze.SaveOptions({resourceName: 'SpecialSave'});
manager.saveChanges(null, saveOptions); // save all pending changes to ~/api/SpecialSave
在这种情况下,您希望 server-side 网络 api 控制器为您的用例实施具有特殊逻辑的 SpecialSave
方法。
你为什么要这样做?也许您会在服务器上的 SaveChanges
方法中编写保护逻辑以拒绝对用户的更改,将该任务专门委派给此受适当授权规则保护的 SpecialSave
方法。
您可以根据需要编写任意数量的替代保存端点。
总结
显然有两种 breeze 资源名称 - 查询和保存。他们的目的不同。它们的相似之处在于它们导致 EntityManager
将 HTTP 请求发送到 URL,这是 dataServiceName 和资源名称的串联。
我正在尝试将 breezeJS 库添加到我的 Angular 项目中。我对 breeze 的资源感到困惑:
查看 API 我看到 MetaDataStore
有一个方法 getEntityTypeNameForResourceName
我假设 returns 来自 "resource name" 的正确实体类型名称我认为这是一个可以给实体的昵称。我认为它的运行方式类似于:
metaStore.getEntityTypeNameForResourceName('users') // returns USR where USR is the table name in the db
然而,在 API 文档中,我看到 SaveOptions object 在其构造函数中采用了可选的 [resourceName] 参数。我假设这是处理保存的服务 URL 或控制器方法?
这是两种不同的"resources"吗?我的解释是否正确?
提前致谢。
有些相同,有些不同。
查询资源名称
getEntityTypeNameForResourceName('users')
显示与 查询资源名称、'users' 关联的 EntityType
名称。在您的情况下,EntityType
名称是 'USR',我敢打赌这是服务器 class 的名称 以及客户端上的 EntityType
.
我不知道您是如何创建元数据的,所以我无法确定 'users' 资源名称是如何产生的。如果您从 EF DbContext
生成元数据,则查询资源名称 'users' 可能与相应 DbSet
的名称相匹配。这就是 Breeze-on-.NET 的假设。
我还猜测您使用类似这样的表达式查询用户:
var query = breeze.EntityQuery.from('users') ...
'users'
参数就是我们所说的breeze中的"query resource name"。因为大多数人只提供 "query resource name",我们倾向于只说 "resource name".
从 HTTP 角度来看,相应的 server-side 资源是 breeze dataServiceName 和此 "resource name" 的串联。如果您使用数据服务名称 "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
这 returns 也缓存了用户:-)
metaStore.setEntityTypeForResourceName ( 'Foo', 'USR' ); // resourceName, entityTypeName
metaStore.getEntityTypeNameForResourceName('Foo'); // returns 'USR'
breeze.EntityQuery.from('Foo').using(manager).executeLocally();
保存资源名称
默认情况下,Breeze EntityManager.saveChanges
方法 POST 将 change-set 负载发送到 dataServiceName + "SaveChanges" 端点(例如 ~/api/SaveChanges
)
假设您的 server-side 网络 api 控制器接受 POST 对 URL 的请求并实施 breeze "SaveChanges" 协议. breeze-on-.NET EntityContextProvider
公开此方法并观察该协议,大多数人将该方法连接到他们的 breeze 控制器的 SaveChanges
方法。
单词"SaveChanges"是默认保存资源名称。很少有开发人员考虑这一点,他们也不应该考虑这一点,除非他们需要多个端点来保存实体更改。
您可以通过指定备用保存资源名称来建立备用保存端点。例如
var saveOptions = new breeze.SaveOptions({resourceName: 'SpecialSave'});
manager.saveChanges(null, saveOptions); // save all pending changes to ~/api/SpecialSave
在这种情况下,您希望 server-side 网络 api 控制器为您的用例实施具有特殊逻辑的 SpecialSave
方法。
你为什么要这样做?也许您会在服务器上的 SaveChanges
方法中编写保护逻辑以拒绝对用户的更改,将该任务专门委派给此受适当授权规则保护的 SpecialSave
方法。
您可以根据需要编写任意数量的替代保存端点。
总结
显然有两种 breeze 资源名称 - 查询和保存。他们的目的不同。它们的相似之处在于它们导致 EntityManager
将 HTTP 请求发送到 URL,这是 dataServiceName 和资源名称的串联。