EF 4.1 以降を使用している場合は、Context.cs ファイルで「ObjectParameter」を「SqlParameter」に、「ExecuteFunction」を「ExecuteStoreQuery」に変更してください。
また、「ExecuteStoreQuery」メソッドでは、ストアド プロシージャの前にパラメーター名を追加する必要があります。以下のスニペットを見つけてください:
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); テンプレートを使用してコードを生成する場合は、以下のスニペットも役立つことがあります。つまり標準の "Fluent TT" ジェネレーターを 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 処理済みReturn =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).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(<#=MultiSchemaEscape (returnType)#>).Assembly); <#+ } foreach (parameters.Where(p => p.NeedsLocalVariable) の var パラメータ) { var isNotNull =parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" :parameter.FunctionParameterName + " !=null"; var notNullInit ="new SqlParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; var nullInit ="new SqlParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + parameter.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); } }コード> プレ>