How to utilize Entity Framework with POCOs and Stored Procedures

c# entity-framework poco stored-procedures

Question

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 &#39;GetHeader&#39; could not be found in the container &#39;DbEntities&#39;.

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)

1
1
11/30/2011 8:31:49 PM

Accepted Answer

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.

6
12/1/2011 9:19:16 AM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow