2011-06-23 103 views
2

在我的數據庫中用戶表我有DataTime字段,名爲DateDeleted - 在用戶存在時爲空,並在用戶「被刪除」時設置爲適當的值。在OData中引入自定義屬性

我不知道是否有引進請將isDeleted屬性的用戶實體,以便

http://odata/service.svc/Users(1)/IsDeleted

將返回的方式取決於DateDeleted是否設置與否

我在谷歌的研究true或false沒有得到任何結果,我幾乎可以肯定,不可能通過odata來實現。我對嗎?

+0

用代碼優先這是可能的:http://stackoverflow.com/a/3870575/861716 –

回答

1

有了內置的提供者,這在WCF DS方面是不可能的。你可能能夠在EF方面做到這一點(將它作爲EF實體的屬性公開),但我不確定這是否可能。 在WCF DS端,您必須實現一個自定義提供程序才能執行此操作。不幸的是,這可能是相當多的工作。如果您有興趣,請參閱初始者:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx。 Shawn在上面提到的是自定義提供程序接口上的方法。

+0

嗨Vitek,感謝您關注此問題。我已經有了一個自定義數據提供者。我遇到的問題是,當我將新屬性引入實體類時,它會給我錯誤3004,要求重新生成數據庫以將此屬性作爲表中的字段添加。我必須錯過基本步驟。如果我有從EDMX模型生成的實體類 - 如何將_'IsDeleted'_屬性添加到它? – Paul

+0

另外,只要提及,這個屬性將不得不通過odata暴露。 – Paul

+1

您確定您有自定義提供者嗎?你真的實現了IDataServiceMetadataProvider和IDataServiceQueryProvider接口嗎?如果你這樣做,它應該相對容易修改它們以公開一個額外的計算屬性。如果你不這樣做,你只需定義一個DataService 其中T是一個ObjectContext,那麼你使用的是內置的EF提供程序,在這種情況下這是不可能在WCF DS端做的事情。 –

0

您可以通過實現DataServiceQueryProvider.GetPropertyValue方法來指定所需的值。

請在這裏找到參考: http://msdn.microsoft.com/en-us/library/system.data.services.providers.idataservicequeryprovider.getpropertyvalue.aspx

的方法有兩個參數,實體對象(用戶實例)和資源屬性(在這種情況下,「請將isDeleted」)。您可以嘗試從實體對象中獲取「DataDeleted」的屬性值,並根據需要返回「IsDeleted」的值。

+0

親愛的肖恩,謝謝你回來。我的模型是用edmx(不是代碼優先)設計的 - 有沒有辦法在edmx模型中使用這種方法?我似乎無法弄清楚在哪裏以及如何實施上述內容。感謝您的幫助 – Paul