Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute StoredProcedure in CodeFirst 4.1

I understand stored procedures mapping is not supported by my understanding is that I should be able to call stored procedures.

I have quite a few complex stored procedures and with the designer I could create a complex type and I was all good.

Now in code first let's suppose I have the following stored procedure, just put together something silly to give an idea. I want to return a student with 1 address.

In code I have A Student and Address Entity. But no StudentAddressEntity as it's a link table.

I have tried the following but I get an error

Incorrect syntax near '."}
System.Data.Common.DbException {System.Data.SqlClient.SqlException}

ALTER Procedure [dbo].[GetStudentById]
   @StudentID int
AS
   SELECT  *
   FROM Student S
   left join StudentAddress SA on S.Studentid = sa.studentid
   left join Address A on SA.AddressID = A.AddressID
   where S.StudentID = @StudentID

C# code:

using (var ctx = new SchoolContext())
{
   var student = ctx.Database.SqlQuery<Student>("GetStudentById,@StudentID",
                                                new SqlParameter("StudentID", id));
}

Any examples out there how to call sp and fill a complexType in code first, using out parameters etc.. Can I hook into ADO.NET?

Trying just an SP that returns all students with no parameters I get this error

System.SystemException = Cannot create a value for property 'StudentAddress' of type 'CodeFirstPrototype.Dal.Address'. Only properties with primitive types are supported.

Is it because I have in a way ignore the link table?

Any suggestions?

like image 453
user712923 Avatar asked Apr 25 '11 09:04

user712923


People also ask

How do I execute a stored procedure?

In Object Explorer, connect to an instance of the SQL Server Database Engine, expand that instance, and then expand Databases. Expand the database that you want, expand Programmability, and then expand Stored Procedures. Right-click the user-defined stored procedure that you want and select Execute Stored Procedure.

How do I run a stored procedure in EF Core 5?

From this object, you can create a command object using the CreateCommand() method. Fill in the CommandText property of the command object with the SQL statement you created with the call to the stored procedure. Open the connection on the database object and you're now ready to call the stored procedure.

Can we call stored procedure in .NET core?

Conclusion. In this article, you learned to call stored procedures by using ASP.NET Core and entity framework. This method is simple and universal, you can use that to call any stored procedure, with a simple entity framework like method, and take the advantage of ASP.NET Core.

Can we use stored procedure in Entity Framework Core?

You can execute SP using FromSql method in EF Core in the same way as above, as shown below.


1 Answers

I believe that your exception actually is:

Incorrect syntax near ','.

because this is invalid statement: "GetStudentById,@StudentID". It should be without comma: "GetStudentById @StudentID".

The problem with stored procedures in EF is that they don't support loading navigation properties. EF will materialize only the main entity and navigation properties will not be loaded. This is solved for example by EFExtensions. EFExtensions are for ObjectContext API so you will have to check if it is also usable for DbContext API.

like image 143
Ladislav Mrnka Avatar answered Oct 08 '22 15:10

Ladislav Mrnka