簡而言之,MS Odata服務器端的實現是而不是 statefull,它可以被認爲是一個REST架構。
我們將被迫使用stasteful機制堅持呈現給JavaScript客戶端
您提供尋呼在請求信息的頁碼。例如,如果你想10項2頁的你會採取前10名,並跳過10
odata-url/?$count=true&$top=10&$skip=10
正如你可以看到客戶端/呼叫方指定分頁,沒有必要讓服務器跟蹤狀態的客戶。
同時加入$count=true
將返回基於結果集中包含的傳入過濾器的記錄總數(在上例中沒有過濾器)。這將允許客戶計算頁面的數量。
框架要求所有的數據庫直接暴露視圖模型...
也是不正確。您可以返回IQueryable<T>
,其中T
是您的類型。 T
不一定是EF模型。例如,從DbContext
返回以下內容是可以接受的。
public IQueryable<SomeEntity> Get() {
return dbContext.SomeEntities
.Where(x => optionalPreFiltereExpression)
.Select(x => new SomeDTO(){
Prop1 = x.Prop1,
Collection1 = x.CollectionOfInterest,
// etc
});
}
爲了進一步說明這一點,你也可以返回對象的一個硬編碼名單,雖然這可能不是在生產中非常有可能。
public IQueryable<SomeEntity> Get() {
return new List<SomeDTO>(){
new SomeDTO(){
Prop1 = 5,
Prop2 = "Hi there"
// etc},
new SomeDTO(){
Prop1 = 6,
Prop2 = "Goodbye"
// etc}
}).AsQueryable();
}
有關於OData的所有選項的資源。我不打算在這裏包括所有的東西,否則我可能只是創建第二套文檔。
https://stackoverflow.com/questions/2458407/difference-between-odata-and-rest-web-services –
等等,是不是分頁部分客戶端發送的請求?除了標題之外,這看起來就像是你的一系列陳述,你真的有問題嗎? – Icepickle
@DavidTansey,謝謝答案追溯到2010年。 – Abhijeet