c# - Entity Framework 核心3.0-捕获错误

标签 c# asp.net-core error-handling entity-framework-core

我试图在Entity Framework Core 3.0中调用过程时捕获错误,但它从未命中catch块。我尝试强制执行一些常见错误,例如错误的过程名称或错误的参数数量。

实际上,我可以逐步执行代码,而不会出错,并且可以在结果 View 中看到这些消息。

Invalid object name...An insufficient number of arguments were supplied for the procedure or function...
我在这里想念什么?我该如何捕捉这样的错误?

        try
        {
            IEnumerable<Users> result = (from x in _db.Users.FromSqlRaw("Execute ustp_MyProcedure)").AsEnumerable()
                                         select x);
            return result;
        }
        catch (Exception ex)
        {
            //Never gets here
        }

更新

我仍然感到困惑,为什么EntityFramework Core 3.0的行为与我在较旧的MVC应用程序中使用的EF6不同。我在这里仍在使用IEnumerable,但是此设置中的错误确实会在catch块中出现。
    private DatabseEntities db = new DatabseEntities();


    public IEnumerable<ustp_MyProcedure_Result> MyMethod(string searchString)
    {
        try
        {
            var result= (from p in db.ustp_MyProcedure(searchString)
                               select p);

            return sourceQuery;
        }
        catch (Exception ex)
        {
            //Even as an IEnumerable, errors DO end up in this catch block
        }
    }

最佳答案

您正在将查询结果分配给IEnumerable变量。 IEnumerable表示未实现的集合。枚举之前,它内部没有任何项目。仅当枚举IEnumerable时,才会执行分配给IEnumerable的数据库查询。

例如,当在foreach循环中使用它时,在其上调用ToList(),ToArray()或任何其他LINQ方法就会发生这种情况。

您只能在结果 View 中获取异常。因为检查结果 View 会具体化集合并执行数据库查询。

如果将代码更改为:

try
    {
        IEnumerable<Users> result = (from x in _db.Users.FromSqlRaw("Execute ustp_MyProcedure)").AsEnumerable()
                                     select x);
        return result.ToList();
    }
    catch (Exception ex)
    {
        //Never gets here
    }

异常将在try块中引发。

关于c# - Entity Framework 核心3.0-捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002856/

相关文章:

spring - 使用DeadLetterPublishingRecoverer处理Spring-kafka错误

java - Android应用-无法启动 Activity ComponentInfo

c# - 如何将大文件 (>1 GB) 的编码转换为 Windows 1252 而不会出现内存不足异常?

c# - 在 IISExpress 中获取 ASP.Net Core 关闭触发 ApplicationStopping 事件

c# - 网址中的破折号(映射到操作)

azure - 如何将 appsettings.json 设置包含到 Azure DevOps 构建和发布管道中

c# - ASP.NET Core 集成测试在本地工作,但在生产环境中运行时抛出空引用异常

php - android +从mysql数据库检索数据

c# - 如何将“20150129163809”格式的字符串解析为日期时间?

c# - 无法加载 API 定义