Asp.net mvc 4 Breeze OData:使用GetEntityByKey(EntitySetController)获取单个条目

Asp.net mvc 4 Breeze OData:使用GetEntityByKey(EntitySetController)获取单个条目,asp.net-mvc-4,asp.net-web-api,odata,breeze,Asp.net Mvc 4,Asp.net Web Api,Odata,Breeze,读取时,要检索单个实体,必须使用fetchEntityByKey manager.fetchEntityByKey(typeName, id, true) .then(successFn) .fail(failFn) 问题1:元数据 尝试使用此方法时,会显示错误,因为尚未加载元数据。更多细节 结果是,每当我需要检索单个实体时,都必须检查元数据是否已加载 manager = new breeze.EntityManager(serviceName); successFn = fu

读取时,要检索单个实体,必须使用
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();
}
问题: 如何扩展breeze,创建一个
Get
方法来检查元数据是否已加载,如果未加载,则加载它

问题2:OData和EntitySetController 我会在API中使用OData标准(带有
EntitySetController
) 演示如何使用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);
    }    
}
生成的url是:
/odata/passos/passos?$filter=Id eq 1

正确的应该是:
/odata/passos(2)

问题: 当使用
fetchEntityByKey
检索实体使用
odata/entity(id)
时,如何修改Breeze

manager = new breeze.EntityManager("/odata/passos");
manager.fetchEntityByKey("Passo", 1, true)
    .then(successFn)
    .fail(failFn)