我正在尝试将breezeJS库添加到我的Angular项目中。我对breeze的资源感到困惑:
查看API我发现HTMLWindow2.execScript
有一个方法MetaDataStore
我假设从“资源名称”返回一个正确的实体类型名称,我认为这是一个可以给实体的昵称。我认为它的运作方式如下:
getEntityTypeNameForResourceName
然而,在API文档中,我看到SaveOptions对象在其构造函数中采用了可选的[resourceName]参数。我假设这是处理保存的服务URL或控制器方法?
这两种不同的“资源”是否正确?
提前致谢。
答案 0 :(得分:1)
排序相同,各种不同。
getEntityTypeNameForResourceName('users')
显示与查询资源名称,'用户'相关联的EntityType
名称。在您的情况下,EntityType
名称是'USR',我打赌是服务器上类的名称以及EntityType
的名称在客户端。
我不知道您是如何创建元数据的,所以我无法确定“用户”资源名称是如何形成的。如果您从EF DbContext
生成元数据,则查询资源名称“users”可能与相应的DbSet
的名称匹配。这就是Breeze-on.NET承担的。
我猜你也在查询表达式如下的用户:
var query = breeze.EntityQuery.from('users') ...
'users'
参数就是我们在微风中称之为“查询资源名称”的参数。因为大多数人只提供“查询资源名称”,所以我们倾向于说“资源名称”。
HTTP透视图中对应的服务器端资源是breeze 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控制器接受对该URL的POST请求并实现轻微的“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
在这种情况下,您希望服务器端Web api控制器为您的用例实现具有特殊逻辑的SpecialSave
方法。
你为什么要这样做?也许您将在SaveChanges
方法中在服务器上编写保护逻辑以拒绝对用户的更改,将该任务专门委派给受适当授权规则保护的SpecialSave
方法。
您可以根据需要编写尽可能多的备用保存端点。
显然有两种微风资源名称 - 查询和保存。他们的目的不同。它们之间的相似之处在于它们会导致EntityManager
将HTTP请求发送到一个URL,该URL是 dataServiceName 和资源名称的串联。