Jeśli używasz EF 4,1 i nowszych, zmień "ObjectParameter" na "SqlParameter" i "ExecuteFunction" na "ExecuteStoreQuery" w pliku Context.cs.
Metoda "ExecuteStoreQuery" oczekuje również dodania nazw parametrów przed przechowywaną procedurą. Znajdź fragment poniżej:
var param1Parameter =param1 !=null ?new SqlParameter("param1", param1) :new SqlParameter("param1", typeof(string));var param2Parameter =param2 !=null ?new SqlParameter("param2 ", param2) :new SqlParameter("param2", typeof(int));return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery("sp_TestSproc @param1, @param2", param1Parameter, param2Parameter);>
Jeśli używasz szablonu do generowania kodu, poniższy fragment kodu również może się przydać. Tj. Zmodyfikowałem standardowy generator „Fluent TT”, aby pasował do EF 4.3:
<> void WriteFunctionImport(EdmFunction edmFunction, bool includeMergeOption) { var parameters =FunctionImportParameter.Create(edmFunction.Parameters, Code, EFTools); var paramList =String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray()); var returnType =edmFunction.ReturnParameter ==null ? null :EFTools.GetElementType(edmFunction.ReturnParameter.TypeUsage); var przetworzonyReturn =returnType ==null ? "int" :"ObjectResult<" + MultiSchemaEscape(returnType) + ">"; if (includeMergeOption) { paramList =Code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; } #> <#=AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction))#> <#=processedReturn#> <#=Code.Escape(edmFunction)#>(<#=paramList#>) { <#+ if(returnType ! =null &&(returnType.EdmType.BuiltInTypeKind ==BuiltInTypeKind.EntityType || returnType.EdmType.BuiltInTypeKind ==BuiltInTypeKind.ComplexType)) { #> ((IObjectContextAdapter)this).ObjectSContext.MetadataWorkspace().Montaż); <#+ } foreach (parametr var w parametrach.Where(p => p.NeedsLocalVariable)) { var isNotNull =parametr.IsNullableOfT ? parametr.FunctionParameterName + ".HasValue" :parametr.FunctionParameterName + "!=null"; var notNullInit ="new SqlParameter(\"" + parametr.EsqlParameterName + "\", " + parametr.FunctionParameterName + ")"; var nullInit ="new SqlParameter(\"" + parametr.EsqlParameterName + "\", typeof(" + parametr.RawClrTypeName + "))"; #> var <#=parameter.LocalVariableName#> =<#=isNotNull#> ? <#=notNullInit#> :<#=nullInit#>; <#+ } var genericArg =returnType ==null ? "" :"<" + MultiSchemaEscape(returnType) + ">"; var callParams =Code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); var spParams =Code.StringBefore("@", String.Join(", @", parameters.Select(p => p.EsqlParameterName).ToArray())); if (includeMergeOption) { callParams =", mergeOption" + callParams; } #> return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<#=genericArg#>("<#=edmFunction.Name#> <#=spParams#>" <#=callParams#>); } <#+ if(!includeMergeOption &&returnType !=null &&returnType.EdmType.BuiltInTypeKind ==BuiltInTypeKind.EntityType) { WriteFunctionImport(edmFunction, true); } }