【发布时间】:2017-07-26 16:38:43
【问题描述】:
我需要知道如何使用c#调用实体框架6 Code First中的现有存储过程。
以下是我正在使用的程序:
CREATE PROCEDURE proc_getEmployees
@departmentname varchar(50),
@sortCol varchar(30),
@sortdir varchar(25),
@searchString varchar(50)
AS
BEGIN
SET NOCOUNT ON;
declare @strSQl varchar(1000);
declare @strSQlwhere varchar(500);
declare @strSelectEndPart varchar(100);
set @strSQl = ';WITH employeetable as
(
select ROW_NUMBER() OVER (ORDER BY '+@sortCol+' '+@sortdir+' ) AS RowNumber,COUNT(*) over() as TotalRecords, ID,FirstName,LastName,Designation,DepartmentName,Contact,EmailAddress,Location from Employees ';
set @strSQlwhere = 'where DepartmentName = '''+@departmentname+'''';
set @strSQlwhere = @strSQlwhere+ ' and (Id like ''%' + @searchString + '%'' Or FirstName like ''%' + @searchString + '%'' Or LastName like ''%' + @searchString + '%'' Or Designation like ''%' + @searchString + '%'' Or DepartmentName like ''%' + @searchString + '%'' Or Contact like ''%' + @searchString + '%'' Or EmailAddress like ''%' + @searchString + '%'' Or Location like ''%' + @searchString + '%'')';
set @strSelectEndPart =') select * from employeetable';
set @strSQl = @strSQl +@strSQlwhere+@strSelectEndPart;
execute (@strSQl);
END
GO
我正在查询的表是员工,其结构如下:
Column Type Length
ID int 4
FirstName varchar 50
LastName varchar 50
Designation varchar 50
DepartmentName varchar 50
Contact varchar 50
EmailAddress varchar 50
Location varchar 50
DBContext 类如下:
public class DevelopmentTestDatabaseContext :DbContext
{
public DevelopmentTestDatabaseContext() : base("name =DevelopmentTestDatabaseContext")
{
}
public virtual DbSet<Employee> EmployeeData { get; set; }
}
存储过程调用方法如下:
public void GetEmployeeDataUsingProcedure()
{
object[] parameters = new SqlParameter[4];
List<EmployeeResultSet> lstEmployees = new List<EmployeeResultSet>();
try
{
using (var db = new DevelopmentTestDatabaseContext())
{
SqlParameter param = new SqlParameter("@departmentname", "IT");
parameters[0] = param;
param = new SqlParameter("@sortCol", "ID");
parameters[1] = param;
param = new SqlParameter("@sortdir", "asc");
parameters[2] = param;
param = new SqlParameter("@searchString", "ope");
parameters[3] = param;
var results = db.Database.SqlQuery<EmployeeResultSet>("proc_getEmployees @departmentname, @sortCol, @sortdir, @searchString", parameters);
db.Database.Log = query => System.Diagnostics.Debug.Write(query);
lstEmployees = results.ToList();
}
}
catch (Exception ex)
{
}
}
为存储过程结果集定义了如下类:
public class EmployeeResultSet
{
public int rowNumber { get; set; }
public int totalRecords { get; set; }
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Designation { get; set; }
public string DepartmentName { get; set; }
public string Contact { get; set; }
public string EmailAddress { get; set; }
public string Location { get; set; }
}
请让我知道在调用存储过程之前是否需要做任何其他事情。我是 EF6 的新手,遇到了问题。代码中缺少什么?我需要对任何课程进行一些更改吗?
【问题讨论】:
-
如果我没记错的话,你所有的参数都是
new SqlParameter("@searchString", "ope")。你应该做parameters[0] = new SqlParameter("@key", "value"); parameters[1] = new SqlParameter("@key2", "value2");等等。本质上你是在说parameters[0]-[4] = param。然后你改变它每一行。因此,您正在更改数组中的值。
标签: c# .net asp.net-mvc entity-framework-6