/// <summary> /// Gets the EDM model for the given type and request. Override this method to customize the EDM model used for /// querying. /// </summary> /// <param name="elementClrType">The CLR type to retrieve a model for.</param> /// <param name="request">The request message to retrieve a model for.</param> /// <param name="actionDescriptor">The action descriptor for the action being queried on.</param> /// <returns>The EDM model for the given type and request.</returns> public virtual IEdmModel GetModel(Type elementClrType, HttpRequestMessage request, HttpActionDescriptor actionDescriptor) { // Get model for the request IEdmModel model = request.ODataProperties().Model; if (model == null || model.GetEdmType(elementClrType) == null) { // user has not configured anything or has registered a model without the element type // let's create one just for this type and cache it in the action descriptor model = actionDescriptor.GetEdmModel(elementClrType); } Contract.Assert(model != null); return model; }
private static ODataQueryContext CreateQueryContext(Type entityClrType, HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) { // Primitive types do not construct an EDM model and deal only with the CLR Type if (TypeHelper.IsQueryPrimitiveType(entityClrType)) { return new ODataQueryContext(entityClrType); } else { // Get model for the entire app IEdmModel model = configuration.GetEdmModel(); if (model == null) { // user has not configured anything, now let's create one just for this type // and cache it in the action descriptor model = actionDescriptor.GetEdmModel(entityClrType); Contract.Assert(model != null); } // parses the query from request uri return new ODataQueryContext(model, entityClrType); } }