使用实体框架从存储过程获取多个字符串输出
问题描述:
以下存储过程显示三个字符串和一个表格行结果作为输出。 有什么办法可以使用实体框架在mvc视图输出面板上显示所有结果?使用实体框架从存储过程获取多个字符串输出
我可以在下面的代码中看到第一个字符串结果。但是无论如何要得到另外两个选择字符串输出和 表格结果。
private CustomerEntities db = new CustomerEntities();
public ActionResult Index()
{
var results = db.usp_CustomerData("124544", 1500);
var abc = results.ToList();
return View();
}
ALTER PROCEDURE [dbo].[usp_CustomerData]
@CustomerID varchar(6),
@MinsBack int
AS
BEGIN
DECLARE @Count int
SET @Count = (SELECT Count(*)
FROM Customer WITH (NOLOCK)
WHERE CustomerID = @CustomerID AND
DATEDIFF(mi, ReceivedAt, GETUTCDATE()) < @MinsBack)
IF (@Count = 1)
SELECT 'Ok: 1 message in Customer table'
ELSE
SELECT 'ERROR: Expected 1 message in Customer table, but found ' + CONVERT(varchar(3), @Count) + ' messages.'
SET @Count = (SELECT Count(*)
FROM CustomerDetails WITH (NOLOCK)
WHERE CustomerID = @CustomerID AND
DATEDIFF(mi, LastUpdatedAt, GETDATE()) < @MinsBack)
IF (@Count = 1)
SELECT 'Ok: 1 record in CustomerDetails table'
ELSE
SELECT 'ERROR: Expected 1 record in CustomerDetails table, but found ' + CONVERT(varchar(3), @Count) + ' records.'
SET @Count = (SELECT Count(*)
FROM CustomerProduct WITH (NOLOCK)
WHERE CustomerID = @CustomerID AND
DATEDIFF(mi, LastUpdatedAt, GETDATE()) < @MinsBack)
IF (@Count = 1)
SELECT 'Ok: 1 record in CustomerProduct table'
ELSE
SELECT 'ERROR: Expected 1 record in CustomerProduct table, but found ' + CONVERT(varchar(3), @Count) + ' records.'
SELECT *FROM Customer where customerID = @CustomerID
END
答
建议您可以在您的SQL脚本中创建一个用作临时存储的临时表。
CREATE TABLE #Results
(
Message VARCHAR(512)
)
而不是在每个IF
直接SELECT
或ELSE
你应该插入串入临时表。 在最后你可以达到你的目标是让所有插入的字符串由返回他们:
SELECT * FROM #Results
得到客户 - 就像你在做到底 - 你应该触发一个新的查询数据库。
根据您的情况,您应该考虑通过数据上下文查询数据库,而不是通过存储过程查询数据库。
答
你需要做的是在本link建议,但我总结如下
对于每个结果集,你需要做一个reader.NextResult();
var someReturnObject = new ResultObject();
using (var context = new LinqPadDbContext(@"Server=localhost\SQLEXPRESS;Database=StackOverflow;Trusted_Connection=True;"))
{
var cmd = context.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[GetSomeData]";
try
{
context.Database.Connection.Open();
var reader = cmd.ExecuteReader();
var result1 = ((IObjectContextAdapter)context).ObjectContext.Translate<string>(reader);
someResultObject.Text1 = result1.First();
//for each extra result, start here
reader.NextResult();
var users = ((IObjectContextAdapter)context).ObjectContext.Translate<User>(reader);
someResultObject.Users = users.Select(x => x);
//stop here
}
finally
{
context.Database.Connection.Close();
}
}
结合其他答案只需要处理两个输出。 –