我試圖在我的Entity Framaework 4中使用存儲過程。如何從實體框架調用沒有返回數據的存儲過程?
我已經創建了實體模型,並可以在Stored Procedure文件夾中的模型瀏覽器中看到存儲的過程。
我通過功能導入添加了存儲過程。我存儲的proc沒有返回類型。現在,當我試圖在對象上下文(業務層)中調用存儲過程時,我無法在智能中看到存儲的過程。我在做什麼錯誤?
注:如果他們有返回值,我可以看到其他過程。在這種特殊情況下,沒有任何返回值
我試圖在我的Entity Framaework 4中使用存儲過程。如何從實體框架調用沒有返回數據的存儲過程?
我已經創建了實體模型,並可以在Stored Procedure文件夾中的模型瀏覽器中看到存儲的過程。
我通過功能導入添加了存儲過程。我存儲的proc沒有返回類型。現在,當我試圖在對象上下文(業務層)中調用存儲過程時,我無法在智能中看到存儲的過程。我在做什麼錯誤?
注:如果他們有返回值,我可以看到其他過程。在這種特殊情況下,沒有任何返回值
由於某種原因,POCO生成模板會忽略沒有返回類型的函數導入。我真的不知道他們爲什麼這樣做,但可以通過更改模板來修復它。我記得在我放棄整個EF-POCO之前,我也這樣做了。你使用EF的POCO?要解決這個問題,你必須打開.tt模板文件。基本上我只是複製正常功能導入的循環,並稍微改變了它。我加入了
foreach (EdmFunction edmFunction in container.FunctionImports)
{
var parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
string paramList = String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray());
if (edmFunction.ReturnParameter != null)
{
continue;
}
#>
<#=Accessibility.ForMethod(edmFunction)#> void <#=code.Escape(edmFunction)#>(<#=paramList#>)
{
<#
foreach (var parameter in parameters)
{
if (!parameter.NeedsLocalVariable)
{
continue;
}
#>
ObjectParameter <#=parameter.LocalVariableName#>;
if (<#=parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"#>)
{
<#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>", <#=parameter.FunctionParameterName#>);
}
else
{
<#=parameter.LocalVariableName#> = new ObjectParameter("<#=parameter.EsqlParameterName#>", typeof(<#=parameter.RawClrTypeName#>));
}
<#
}
#>
base.ExecuteFunction("<#=edmFunction.Name#>"<#=code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()))#>);
}
<#
}
您可以找到相關的Q/A在這裏:FunctionImport in entity framework 4 issue
您需要將程序映射到更新讀取或刪除操作,否則在映射它時沒有意義。另一種方法是直接在上下文中執行它。