2014-01-15 24 views
1

我在我的客户端和服务器上都使用了Breeze和sql express数据库。Breeze未能解决web api控制器方法

我的服务器代码:

[Authorize] 
[BreezeController] 
public class DataController : ApiController{ 

    [HttpGet] 
    public IQueryable<Product> Products() 
    { 
    ... 
    } 
} 

我的客户端代码:

var getProducts = function() { 
     var query = entityQuery.from('Products'); 

     return manager.executeQuery(query) 
       .then(querysucceeded) 
       .fail(queryfailed); 
     ... 
    }; 

这工作得很好。但是,文档说传递给EntityQuery.from(...)的参数应该是breeze web api控制器方法之一。所以,我希望加入以下服务器:

[HttpGet] 
    public IQueryable<Product> TestMethod() 
    { 
    ... 
    } 

而且给客户:

var getProjects = function() { 
     var query = entityQuery.from('TestMethod'); 

     return manager.executeQuery(query) 
       .then(querysucceeded) 
       .fail(queryfailed); 
     ... 
    }; 

我预计这个工作,但它不会:( 我得到以下错误控制台:

Uncaught Error: Cannot find an entityType for resourceName: 'TestMethod'. Consider adding an 'EntityQuery.toType' call to your query or calling the MetadataStore.setEntityTypeForResourceName method to register an entityType for this resourceName.

回答

3

微风客户需要知道的EntityType正在被对应于每一个“资源返回名称”。它知道这是因为元数据的“产品”资源,其中此资源名称与“产品”实体类型配对,但不知道“TestMethod”返回的内容。

所以你的解决方法是执行查询之前,或者调用

manager.setEntityTypeForResourceName("TestMethod", "Product"); 

。或者你可以改变你的查询来使用'toType'方法。

var query = entityQuery.from('TestMethod').toType("Product"); 
return manager.executeQuery(query) 
+1

+1!真棒工作!用这条信息更新文档会很好。在旁注中,你们建立了一个奇迹!我只是喜欢Breeze框架。 – GETah

+1

这是这里的一些讨论:http://www.breezejs.com/documentation/querying-locally,但承认不在明显的地方。 –

+1

奇怪的是,我从今天开始看到这个错误,我不相信我改变了代码,也没有升级。在我的情况下,我返回IQueryable ,而不是一个真正的EntityType。我应该在这里做什么? – newman