【问题标题】:AspNetCore 2.0 crashing when calling EntityFrameWork core (Overflow Exception)AspNetCore 2.0 在调用 EntityFrameWork 核心时崩溃(溢出异常)
【发布时间】:2018-02-16 05:49:13
【问题描述】:

这个问题我已经有一段时间了,已经和微软谈过了,到目前为止还没有解决办法。 现在我在一个全新的项目中重现了这个错误。 我已经删除了所有不必要的代码,但这段代码仍然给我错误:

System.StackOverflowException occurred
  HResult=0x800703E9
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

我的项目包含一个具有以下内容的 Startup.cs 类:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<FrilivDB>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")).EnableSensitiveDataLogging());
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute("ViewProduct", "{brand}/{productTitle}", defaults: new { controller = "Products", action = "Details" });
        });
    }
}

我的 Productscontroller 如下所示:

public class ProductsController : Controller
{
    private readonly FrilivDB _context;

    public ProductsController(FrilivDB context)
    {
        _context = context;
    }

    public async Task<IActionResult> Details(string brand, string productTitle)
    {
        var product = _context.Products.Select(p => p.Title);
        return View();
    }
}

当在调试器中通过这一行时,会发生错误:

var product = _context.Products.Select(p => p.Title);

每次等待 15 到 30 秒后都会发生错误。 有没有人有同样的想法或经历过?

这是我在输出窗口中看到的:

    AO.Shop>       Request starting HTTP/1.1 GET http://localhost:44317/tatonka/alaska  
AO.Shop> info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
AO.Shop>       Request starting HTTP/1.1 GET http://localhost:44317/tatonka/alaska  
AO.Shop> info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
AO.Shop>       Executing action method AO.Shop.Controllers.ProductsController.Details (AO.Shop) with arguments (tatonka, alaska) - ModelState is Valid
AO.Shop> info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
AO.Shop>       Executing action method AO.Shop.Controllers.ProductsController.Details (AO.Shop) with arguments (tatonka, alaska) - ModelState is Valid
AO.Shop> 
AO.Shop> Process is terminating due to StackOverflowException.

【问题讨论】:

  • 这是我在输出窗口中看到的:´´`

标签: c# entity-framework asp.net-core asp.net-core-2.0 asp.net-core-mvc-2.0


【解决方案1】:

在与 Microsoft 进行大量交流以及大量调试和注释代码进出之后,我发现了问题。

这是由于数据库设置不佳所致。 我的数据库中有 4 个表,它们将它们自己引用为外键,这导致了 EF Core 的 Stackoverflow 异常。

删除所有 4 个并重建整个模型后,它工作了。 感谢您的意见

【讨论】:

    【解决方案2】:

    添加一个或多个 try-catch 语句以获取有关正在生成的异常的更多信息。然后使用该信息更新您的代码以防止发生异常。

    另外,请考虑查看 Microsoft 为 ASP.NET 2.0 提供的补丁。这个ASP.NET 2.0 hotfix rollup package page 引用了一些可能适用于您的问题的问题。另一种选择是升级到 ASP.NET 3.5+,但我认为您正在尝试避免这种方法。

    我希望这会有所帮助。

    【讨论】:

    • 这更多的是评论而不是答案,因此您应该将其移至 cmets 部分
    • 我试过了,它没有被任何try catch捕获。我有没有提到微软还没有找到解决方案。 msvsmon 中可能会以某种方式发生错误
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多