据我所知,没有优雅的方法可以使用表值参数在EF6中调用存储过程。有人可以证实或诋毁我的怀疑吗?
表值类型:
CREATE TYPE MyTestType AS TABLE
(
ID INT,
String VARCHAR(30)
);
存储过程:
CREATE PROCEDURE MyTestProc
@TestVar MyTestType READONLY
AS
BEGIN
SELECT * FROM @TestVar
END
C#EF电话:
var testTable = new DataTable();
testTable.Columns.Add("ID", typeof (int));
testTable.Columns.Add("string", typeof (string));
testTable.Rows.Add(1, "Row1");
var parameter = new SqlParameter("@TestVar", SqlDbType.Structured);
parameter.Value = testTable;
parameter.TypeName = "dbo.MyTestType";
var results = dbContext.Database.SqlQuery<TestObject>("exec dbo.MyTestProc @TestVar", parameter).ToList();
上面的代码正在运行,我想看看是否有更优雅的执行方式。我觉得我应该被允许做像
这样的事情var results = dbContext.MyTestProc(testTable).ToList();
修改
我遇到过这篇文章,它有一种稍微简洁的处理数据表的方法,但仍然希望用表值参数调用我的存储过程更简洁。
Code.msdn - Stored Procedure with Table-Valued Parameter in EF and ASP.NET MVC