2014-04-05 20 views
1

是否可以使用breeze查詢既不是具有breeze屬性的控制器,也不具有元數據的odata端點的端點?假設我們有這樣的控制器:如何使用Breeze查詢常規可查詢WebApi端點?

public class PersonsController : ApiController 
{ 
    private AppContext db = new AppContext(); 
    [Queryable] 
    public IQueryable<Person> Get() 
    { 
     return db.People; 
    } 
} 

我已經能夠通過查詢PARAMATERS篩選,並想用微風庫檢索數據,下面的例子中失敗,因爲風試圖查詢API /元數據和有沒有這樣的元數據,當然這個控制器。

'use strict'; 
var serviceName = "api/"; 
breeze.config.initializeAdapterInstances({ dataService: "WebApi" }); 
var manager = new breeze.EntityManager(serviceName); 
// would like a GET api/persons?$orderby=LastName&$skip=50&$top=10 
var qry = breeze.EntityQuery.from('persons').orderBy("LastName").skip(50).take(10); 

manager.executeQuery(qry).then(function (data) { 
    //expecting data.results to contain the filtered/sorted set of Persons 
}); 

支持微風查詢非微風/ odata api控制器嗎?

回答

2

對於任何微風DataService你可以輕而易舉地不要期望服務的元數據。

默認情況下,breeze確實希望從服務中獲取元數據,因此您需要通過將DataService的hasServerMetadata設置爲false來告訴微風。像這樣的:

var dataService = new DataService({ 
     serviceName: "aaa/bbb/myService", 
     hasServerMetadata: false 
    }); 

    return new EntityManager({ 
     dataService: dataService, 
    }); 

如果你這樣做,那麼你還需要直接在客戶端上描述元數據。請參閱http://www.breezejs.com/documentation/metadata-by-hand瞭解如何操作。如果你沒有描述元數據,那麼微風將把任何查詢的結果視爲匿名類型,而不是將結果合併到本地EntityManager中。