2016-10-18 39 views
0

在我的ODATA web api v4中,我試圖讓多個DTO用於單個實體。OData multiple DTO for same entity

ODataModelBuilder builder = new ODataConventionModelBuilder(); 
var version = builder.MaxDataServiceVersion; 
builder.EntitySet<PersonModelAdminDTO>("PersonModel").EntityType.HasKey(p => p.RecordId); 
builder.EntitySet<PersonModelBasicDTO>("PersonModel").EntityType.HasKey(p => p.RecordId); 

我試過上面的代碼,但它說實體已經添加了。

基本上,因爲我不想公開PersonModel的所有屬性爲基本用戶,我創建了單獨的DTO。

我不想將PersonModelAdminDTO和PersonModelBasicDTO集合分別顯示給客戶端元數據,因爲這會讓人感到困惑。

---編輯----

繼我曾嘗試 https://github.com/OData/ODataSamples/tree/master/WebApi/v4/DynamicEdmModelCreation

的建議修改了它稍微

await SendQuery("/odata/mydatasource/Products?$select=ID", "Query the Products entity set."); 

似乎在現有的bug開放:

stackoverflow.com/questions/29308157/

github.com/OData/WebApi/issues/175

回答

0

你真的只能添加這些東西到元一個,所以我認爲你這裏有兩種選擇:

  1. 您可以添加完整的對象,並根據用戶,只填充他們有權訪問的屬性。這可能是最容易做的事情,但這確實意味着屬性將位於元數據中

  2. 您可以根據每個請求創建模型,並檢查確定要添加哪個DTO的用戶類型。有動態建模here的一個例子,但它不是周圍的權限

+0

第二個選項不支持OData的查詢,即$過濾器,中心$選擇等 – mehwish

+0

@mehwish它可以做,這是怎麼了我有我的系統設置,它支持$ filter和$ select。你爲什麼認爲它不會支持? – TomDoesCode

+0

我已使用您的建議編輯了我的問題。如果您有解決此問題的工作,請讓我知道。 – mehwish