2014-01-15 2 views
1

Я использую Breeze как на моем клиенте, так и на сервере с помощью базы данных sql express.Breeze не удается разрешить метод контроллера 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(...), должен быть одним из методов контроллера веб-ассемблера. Поэтому я хотел бы ожидать, добавив следующие сервера:

[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

нуждается клиент Breeze знать EntityType что возвращается соответствующий каждому «ресурс Имя". Он знает это для ресурса «Продукты» из-за метаданных, где это имя ресурса сопряжено с типом entity-типа «Product», но не знает, что возвращает «TestMethod».

Так что ваши проблемы необходимо либо позвонить

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

перед выполнением запроса. Или вы можете изменить свой запрос, чтобы использовать метод toType.

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

+1! Удивительно, что сработало! Было бы неплохо обновить документацию с этой информацией. На стороне записки, вы, ребята, создали чудо! Мне просто нравится бриз. – GETah

+1

Это несколько обсуждение этого здесь: http://www.breezejs.com/documentation/querying-locally, но, по общему признанию, не в очевидном месте. –

+1

Странно, я начал видеть эту ошибку только сегодня, и я не верю, что я изменил этот код и не обновил. В моем случае я возвращаю IQueryable , а не настоящий EntityType. Что мне здесь делать? – newman

Смежные вопросы