From d15424697e55c53b1cee3da28f3f6cb6f02f8e4d Mon Sep 17 00:00:00 2001 From: Phil Boyd Date: Wed, 12 Oct 2016 08:09:37 -0400 Subject: [PATCH] Fixed erroneous NotSupportedException --- EntityFramework.Functions/Function.DbModel.cs | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/EntityFramework.Functions/Function.DbModel.cs b/EntityFramework.Functions/Function.DbModel.cs index 100ce0d..6b17981 100644 --- a/EntityFramework.Functions/Function.DbModel.cs +++ b/EntityFramework.Functions/Function.DbModel.cs @@ -492,7 +492,7 @@ private static IList GetStoreReturnParameters( if (modelReturnParameterComplexType != null) { storeReturnParameterRowType = RowType.Create( - modelReturnParameterComplexType.Properties.Select(property => + modelReturnParameterComplexType.Properties.Select(property => EdmProperty.Create(property.Name, model.ProviderManifest.GetStoreType(property.TypeUsage))), null); } @@ -553,16 +553,37 @@ private static IList GetModelParameters( .ToArray(); } - private static IList GetModelParametersForModelDefinedFunction( - this DbModel model, MethodInfo methodInfo) + private static IList GetModelParametersForModelDefinedFunction(this DbModel model, + MethodInfo methodInfo) { ParameterInfo[] parameters = methodInfo.GetParameters().ToArray(); + /* return parameters .Select((parameterInfo) => FunctionParameter.Create( - parameterInfo.GetCustomAttribute()?.Name ?? parameterInfo.Name, - model.GetModelStructualType(parameterInfo.ParameterType, methodInfo), - ParameterMode.In)) + parameterInfo.GetCustomAttribute()?.Name ?? parameterInfo.Name, + model.GetModelStructualType(parameterInfo.ParameterType, methodInfo), + ParameterMode.In)) .ToArray(); + */ + var result = parameters.Select((parameterInfo) => + { + EdmType type; + try + { + type = model.GetModelPrimitiveType(parameterInfo.ParameterType, methodInfo); + } + catch (NotSupportedException) + { + type = model.GetModelStructualType(parameterInfo.ParameterType, methodInfo); + } + + return FunctionParameter.Create(parameterInfo.GetCustomAttribute()?.Name + ?? parameterInfo.Name, + type, + ParameterMode.In); + }) + .ToList(); + return result; } private static IList GetModelReturnParameters(