使用EntityFramework可以很方便的与数据库打交道,但是对于存储过程,返回类型很让人纠结,默认只返回受影响的行数,而我们在使用存储过程时往往是会返回一串的数据或者一个表。那有没有什么方法呢?
我们知道在SQL2008是支持表类型的,如果存储过程在执行完成后返回了一个表类型,在EF端再接收一下,那是不是就可以了呢?事实证明是可行的。我们需要分几个步骤。
1.在数据库中建立一个表类型,比如叫KEY_VALUE类型。
-- Create the data type
CREATE TYPE KEY_VALUE AS TABLE
(
[Key] NVARCHAR(50),
[Value] NVARCHAR(max),
[Remark] NVARCHAR (max)
)
GO
如下图
2.存储过程
假定我们需要传入一个字符串的过滤条件,那么我们的存储过程可以定义一个参数,之后再拼接成SQL,使用EXEC来执行,同时把结果存入到表类型变量中。
CREATE PROCEDURE [dbo].[QueryStudent]
@whereStr NVARCHAR(MAX) --根据需要定义的where条件
AS
BEGIN
DECLARE @