阅读Breeze 网站中的文档,要检索单个实体必须使用fetchEntityByKey
.
manager.fetchEntityByKey(typeName, id, true)
.then(successFn)
.fail(failFn)
问题 1:元数据
尝试使用此方法时,会显示错误,因为尚未加载元数据。有关此错误的更多详细信息。
结果是,每当我需要检索单个实体时,都必须检查是否加载了元数据。
manager = new breeze.EntityManager(serviceName);
successFn = function(xhr) {}
failFn = function(xhr) {};
executeQueryFn = function() {
return manager.fetchEntityByKey(typeName, id, true).then(successFn).fail(failFn);
};
if (manager.metadataStore.isEmpty()) {
return manager.fetchMetadata().then(executeQueryFn).fail(failFn);
} else {
return executeQueryFn();
}
问题
如何扩展微风,创建一个Get
方法来检查是否加载了元数据,如果没有,则加载它?
问题 2:OData 和 EntitySetController
我会EntitySetController
在我的 API 中使用 OData 标准(带有 )。
Breeze 文档中的此页面展示了如何使用 OData 部署我的应用程序 ,然后按照本教程进行操作。
正如您在此处和此处看到的那样,问题在于EntitySetController
遵循 odata 模式,检索实体必须使用odata/entity(id)
,或检索您可以使用“odata/entity”的所有实体。
例子
在控制器中:
[BreezeController]
public class passosController : EntitySetController<Passo>
{
[HttpGet]
public string Metadata()
{
return ContextProvider.Metadata();
}
[HttpGet, Queryable(AllowedQueryOptions = AllowedQueryOptions.All, PageSize = 20)]
public override IQueryable<T> Get()
{
return Repositorio.All();
}
[HttpGet]
protected override T GetEntityByKey(int key)
{
return Repositorio.Get(key);
}
}
当我使用:
manager = new breeze.EntityManager("/odata/passos");
manager.fetchEntityByKey("Passo", 1, true)
.then(successFn)
.fail(failFn)
生成的url是:/odata/passos/Passos?$filter=Id eq 1
正确的应该是:/odata/passos(2)
问题
如何修改 Breeze 以用于fetchEntityByKey
检索实体用途odata/entity(id)
?