Introduce custom property in OData

2019-07-04 12:29发布

问题:

In my database User table I have DataTime field called DateDeleted - which is null while user exists and is set to the proper value when user "is deleted".

I wonder if there is a way to introduce IsDeleted property for User entity so that

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

will return true or false depending on whether DateDeleted is set or not

My research in google hasn't got any results and I am almost sure it is not possible to implement through odata. Am I right?

回答1:

With the built in providers this is not possible on the WCF DS side of things. You might be able to somehow do this on the EF side (expose it as a property of the EF entity), but I'm not sure if that's possible. On the WCF DS side, you would have to implement a custom provider in order to do this. Which may be quite a lot of work unfortunately. If you're interested see this for starters: http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx. What Shawn refers to above is a method on the custom provider interface.



回答2:

You can specify the value you want by implementing the method DataServiceQueryProvider.GetPropertyValue.

Please find the reference here: http://msdn.microsoft.com/en-us/library/system.data.services.providers.idataservicequeryprovider.getpropertyvalue.aspx

The method takes two parameters, the entity object (a User instance) and the resource property (in this case "IsDeleted"). You can try to get the property value of "DataDeleted" from the entity object, and return the value of "IsDeleted" as you want.



标签: odata