【发布时间】:2021-12-05 19:28:48
【问题描述】:
我有一个 EF Core DbContext(继承自 IdentityDbContext)和一堆迁移。在我的网络应用中一切正常。
我有一堆单元测试,它们使用 Microsoft.EntityFrameworkCore.Sqlite 针对 Sqlite 内存数据库启动 DbContext。
当我运行单元测试时,我收到以下错误:
Microsoft.Data.Sqlite.SqliteException SQLite 错误 1:'AUTOINCREMENT 只允许在 INTEGER PRIMARY KEY 上使用'。
我怎样才能知道这个错误是在哪里引起的?
script-database -Idempotent 不会产生任何AUTOINCREMENT 的实例,尽管我认为它使用的是 T-SQL 方言,而不是 Sqlite?
我怎样才能找到这个问题的根本原因?
更新
好的,所以我将调试器设置为在引发 Sqlite 异常时中断,然后为 Microsoft.Data.Sqlite 加载符号,在SqliteCommand.PrepareAndEnumerateStatements() 中我可以看到_commandText 字段具有以下值,即由 EntityFramework 从迁移中生成:
CREATE TABLE "ef_temp_AspNetRoleClaims" (
"Id" int NOT NULL CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY AUTOINCREMENT,
"ClaimType" nvarchar(1000) NULL,
"ClaimValue" nvarchar(1000) NULL,
"RoleId" uniqueidentifier NOT NULL,
CONSTRAINT "FK_AspNetRoleClaims_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE
);
【问题讨论】:
-
唯一需要的修改是从
int到integer。
标签: .net sqlite entity-framework-core