Reputation: 6089
I am trying here to use Entity Framework with Stored procedures and POCOS and 2 different projects.
I have one project DataAccess (for my edmx and DataContexts) and one project BusinessEntities (for my POCOs).
DataAccess have a reference of BusinessEntities.
In my DB I have a pretty standard SP :
CREATE STORED PROCEDURE GetHeader
@id CHAR(35)
AS
BEGIN
SELECT ID, Name FROM mytable WHERE ID = @id
END
The datacontext is :
public class DbContext : ObjectContext
{
public ObjectResult<BusinessEntities.GetHeaderResult> GetHeader(string id)
{
return base.ExecuteFunction<BusinessEntities.GetHeaderResult>("GetHeader", new ObjectParameter("id", id));
}
}
If I only go like this (the EDMX has been updated with the SP but the function has not been imported) I have this error :
System.InvalidOperationException: The FunctionImport 'GetHeader' could not be found in the container 'DbEntities'.
If I import the function correctly I have this error :
System.InvalidOperationException: The type parameter 'BusinessEntites.GetHeaderResult' in ExecuteFunction is incompatible with the type 'DbModel.GetHeaderResult' returned by the function.
I guess that it is only just a simple setting that is missing here but I can't seem to grab it.
Please not that the EDMX file has the correct setting (CodeGenerationStrategy set to none, CustomTool is empty)
Upvotes: 1
Views: 14580
Reputation: 364249
In the first case you are calling wrong method on the context. ExecuteFunction
is only for function imports. Use ExecuteStoreQuery
and SqlParameter
instead. In the second case function import also creates a complex type in your EDMX and EF expects you will use that complex type as a result of function import call.
Upvotes: 6