Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用entitiy framework执行返回0的StoredProcess_Entity Framework_C# 4.0_Stored Procedures - Fatal编程技术网

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语句。