c# - 具有 Entity Framework Core 的 .NET 控制台应用程序:“进程没有包标识”仅在没有调试的情况下启动
问题描述
我有一个与 Entity Framework 和 Discord Sharp Plus 集成的 .NET 控制台应用程序,其中包含以下库:
- DSharpPlus
- DSharpPlus.CommandsNext
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Tools
在不调试的情况下运行应用程序(Visual Studio 中的 Control + F5)工作得很好,没有出现崩溃。
但是,如果我在调试的情况下运行,在访问我的 时DbContext
,我会收到一个错误
InvalidOperationException:进程没有包标识(0x80073D54)
一个例子是这一行:
Database.Commands.SingleOrDefault(x => x.CommandTrigger == name)
出于调试目的,如果我更改SingleOrDefault
为ElementAt(0)
,我会收到以下错误:
System.InvalidOperationException
HResult=0x80131509
消息=“NavigationExpandingExpressionVisitor”处理 LINQ 表达式“DbSet .ElementAtOrDefault(__p_0)”失败。这可能表示 EF Core 中的错误或限制。有关更多详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101433。
源=Microsoft.EntityFrameworkCore堆栈跟踪:
在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
这不是 UWP 应用。它是一个带有多个类库的 .NET 控制台应用程序。
这是我的 Dbcontext 类:
private readonly string dbPath = $"Data Source={Environment.GetEnvironmentVariable("YuutaDbPath")}";
public DbSet<Guild> Guilds { get; set; }
// ...
// ...
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite(dbPath);
protected override void OnModelCreating(ModelBuilder builder)
{
builder.SeedEnumValues//....
}
解决方案
这可能是由 EF Core 处理的内部异常。如果您在 Visual Studio中禁用了“仅启用我的代码”,您将看到此类异常:工具 -> 选项 -> 调试
本质上,当异常发生在您的代码之外时,即使已处理,这也会中断代码执行。
如果您在发生异常时按 F5,它应该继续运行 - 这是您的程序在没有附加调试器时运行而不会出现问题的方式。
推荐阅读
- mysql - 使用 curl(Google Cloud 平台)从存储桶将数据加载到 Cloud SQL
- powershell - 将脚本文件移动到另一个位置后,我的 PowerShell 脚本不起作用?
- java - 保存数据和显示数据时如何防御xss
- python - 1048, "列 'execution_period' 不能为空"
- python - 烧瓶请求csv
- python - 对于与给定元组属于同一类的所有样本,按属性均值处理python中的缺失值?
- android - 在 AlarmManager 和 Broadcast Receiver 的帮助下打开插页式广告
- python - 如何使 tkinter 文本小部件无法选择?
- python-2.7 - 在 Apache Beam Python SDK 中发布/订阅到数据存储批处理数据流作业可能吗?
- python - 在 csv 文件中创建特定行的字典