使用 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();
}
您可以使用下面提到的链接阅读更多相关信息。
我对 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();
}
您可以使用下面提到的链接阅读更多相关信息。