问题
I have an existing database with lots of complex stored procedure and I want to use those procedure through EF 4. I have done the following:
- Created an EF data object,
Customer
. - Added a Stored Procedure into the EF
- Right Click on the EF designer and add a function import.
- Function Import Name -
MyFunction
, complex type.
Resulting code:
CustomerEntities entity = new CustomerEntities();
var result = entity.MyFunction("XYZ", ref o_MyString);
Now my stored procedure has an output parameter which I used to call by the ref (in WebForm). But I am getting the below error:
cannot convert from 'ref string' to 'System.Data.Objects.ObjectParameter'
Please help
Edit
When I am trying to save I am getting the below error
A mapping function binding specifies a function Model.Store.P_GetCustomer with an unsupported parameter: o_MyString. Output parameters may only be mapped through the RowsAffectedParameter property. Use result bindings to return values from a function invocation.
回答1:
Output parameters are returned in ObjectParameter
instance. So you must use code like:
var oMyString = new ObjectParameter("o_MyString", typeof(string));
var result = ctx.MyFunction("XYZ", oMyString).ToList();
var data = oMyString.Value.ToString();
The reason is that function import cannot use ref parameter because output parameter is not filled until you process result set from the database = if you don't call ToList
or iterate the result of the stored procedure the output parameter is null.
回答2:
msdn suggests the following:
CREATE PROCEDURE dbo.GetDepartmentName @ID INT , @Name NVARCHAR(50) OUTPUT AS SELECT @Name = Name FROM Department WHERE DepartmentID = @ID
Solution
using (SchoolEntities context = new SchoolEntities()) { // name is an output parameter. ObjectParameter name = new ObjectParameter("Name", typeof(String)); context.GetDepartmentName(1, name); Console.WriteLine(name.Value); }
来源:https://stackoverflow.com/questions/6192991/output-parameter-in-stored-procedure-in-ef