使用 ef 6 和代码优先的存储过程

Stored procedures with ef 6 and code first

我对 EF 和 MVC 很陌生。但我已经设法用 MCV5 和视图创建了脚手架页面。 我知道 webforms 和 EF 在概念上是有区别的。但是我可以执行在 SSMS 中创建的存储过程吗? 我想要一个带有两个文本框的网页的能力,这些文本框接受存储过程所需的两个输入参数,这两个参数都是字符串,然后在 webgrid 中显示结果。 这对 EF 代码优先和 MVC 可行吗?

我的存储过程的代码是:

CREATE PROCEDURE [dbo].[sp_FindRoutes]

@DepCity nvarchar(max),
@ArvCity nvarchar(max)

AS

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

SELECT dbo.Airlines.AirlineName, dbo.Routes.DepCity, dbo.Routes.ArvCity, dbo.Routes.FlightNr, dbo.AirlineRoutes.Fare, dbo.AirlineRoutes.AircraftAllocated
FROM  dbo.Routes INNER JOIN
         dbo.AirlineRoutes ON dbo.Routes.RouteId = dbo.AirlineRoutes.RouteId INNER JOIN
         dbo.Airlines ON dbo.AirlineRoutes.AirlineId = dbo.Airlines.AirlineId
         WHERE dbo.Routes.DepCity  LIKE @DepCity AND dbo.Routes.ArvCity LIKE @ArvCity;
GO

假设您的 SP 是这样的(只是您 SP 的简单版本)。

CREATE PROCEDURE [dbo].[sp_FindRoutes]  
    @DepCity string
    AS
    BEGIN
    SET NOCOUNT ON;

    SELECT dbo.Airlines.AirlineName, dbo.Routes.DepCity, dbo.Routes.ArvCity
    FROM dbo.Routes
    WHERE dbo.Routes.DepCity= @DepCity
    END

您必须创建一个与存储的 procedure.It 返回的结果具有相同 属性 名称的对象。

    public class RouteForAirline
        {
            public string AirlineName { get; set; }

            public string DepCity { get; set; }

            public string ArvCity { get; set; }

        }

然后调用您的 SP,如下所示。

注意: 如果可以访问 DatabaseContext(),可以将其放在 class file

 using(var context = new DatabaseContext())
        {
         var depCityParameter = new SqlParameter("@DepCity", "colombo");
         var arvCityParameter = new SqlParameter("@ArvCity", "matara");

         var results = context.Database.SqlQuery<RouteForAirline>("sp_FindRoutes @DepCity, @ArvCity",depCityParameter,arvCityParameter).ToList();
        }

您可以使用下面提到的链接阅读更多相关信息。

Code First Insert/Update/Delete Stored Procedures

Stored Procedures with Multiple Result Sets