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

时间:2016-05-01 10:11:57

标签: entity-framework stored-procedures parameters ef-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

1 个答案:

答案 0 :(得分:0)

假设您的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

您必须创建一个与存储过程返回的结果具有相同属性名称的对象。就像这样。

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

            public string DepCity { get; set; }

            public string ArvCity { get; set; }

        }

然后按下图所示拨打SP

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

 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