I'm using Odata/Olingo v2. I have several Entity Types defined including Product and Category. A Product can have many Categories.
I would like to ONLY make Products available as a Feed/Resource. I thought I could accomplish this by defining a Category Entity Type and Association but not adding the Categories EntitySet and AssociationSet to the EntityContainer. I also created a NavigationProperty between Product and Category.
This appears to be valid EDMX, at least Olingo's EdmxProvider.parse() does not object. However, when I post a Product with a collection of Categories to the Products feed Olingo throws an exception from EdmEntityContainerImplProv.getAssociationSet() because it expects to find an AssociationSet for Categories
Is there a way to accomplish this in OData/Olingo v2?
Edit: It's not an option to make Category a ComplexType because I need to have a collection of them and that's not possible in OData/Olingo v2
I am not familiar with olingo implementations, so cant point you to methods/whatever.
But in general: if you want an entity to be accessible as a set (be it as
/Product('123')/ToCategoriesor just/CategorySet), you need the according EntitySet in your metadata and in your implementation.You can, however, limit your implementation to only respond when used via navigation property.
As an example: on an Abap implementation, the method implementing category get_entityset has the information, that it is accessed via navigation property from another entity (or even a path) including keys. Here, you can throw an exception or just return an empty set, if you decide you don’t want to offer direct access to
/CategorySet