Entity framework 使用entitiy framework执行返回0的StoredProcess
我的数据库中有一个如下所示的存储过程:Entity framework 使用entitiy framework执行返回0的StoredProcess,entity-framework,c#-4.0,stored-procedures,Entity Framework,C# 4.0,Stored Procedures,我的数据库中有一个如下所示的存储过程: IF EXISTS (SELECT * FROM Table1) BEGIN -- select statement END using (DatabaseEntities db = new DatabaseEntities()) { var result = db.ALL_GET_JOBS(); if (result == null) {
IF EXISTS (SELECT * FROM Table1)
BEGIN
-- select statement
END
using (DatabaseEntities db = new DatabaseEntities())
{
var result = db.ALL_GET_JOBS();
if (result == null)
{
Console.WriteLine("No new jobs");
}
else
{
Console.WriteLine(string.Format("received {0} new jobs", result.Count()));
}
}
我使用此过程检查表1中是否有任何数据。表1用作数据库端的队列
在我的C应用程序中,我使用实体框架来执行这个存储过程。方法如下所示:
IF EXISTS (SELECT * FROM Table1)
BEGIN
-- select statement
END
using (DatabaseEntities db = new DatabaseEntities())
{
var result = db.ALL_GET_JOBS();
if (result == null)
{
Console.WriteLine("No new jobs");
}
else
{
Console.WriteLine(string.Format("received {0} new jobs", result.Count()));
}
}
当我执行到过程时,我得到一个异常,告诉我结果中不存在我定义的一列。是的,因为程序返回0。在到达if语句之前引发异常
我已经尝试将.DefaultIfEmptynull或.FirstOrDefault添加到过程的调用中,但据我所知,错误发生在结果的计算过程中
你们中有人知道如何处理返回0而不是实体框架中的结果集的过程吗
背景
Christoph我知道这是一种解决方法,但是您是否尝试过让存储过程始终返回相同的结果 比如: 从表1中选择字段1、字段2
您可以只检查result.Count==0而不是result==null。我认为您应该更改sp或使用Count函数创建一个新sp:
SELECT Count(*) FROM Table1
这样,您的结果总是一个0或更大的数字。您的过程中是否有显式的RETURN 0语句,或者如果表为空,它根本不起任何作用?我还尝试了显式的RETURN 0。也不起作用…函数背后的想法是,如果表中没有任何内容,并且如果有任何内容,则不会真正请求数据以返回它们。我还尝试将函数更改为在else分支中返回0。与已使用的问题相同。您的意思是创建一个过程来检查数据是否存在。如果有,请调用另一个过程以获取实际数据。还是我没听错?@Christoph是的,你注意到了,我的建议是有两个存储过程:第一个是存在的,第二个是所有数据(如果需要)。@Christoph或删除if EXISTS,从SP的表1中选择*。我认为罪魁祸首是SPA中的if语句在与我们的数据库工程师交谈后,我们决定删除if语句。