当数据库不存在时 EF Core 和 SQL Server 出现意外行为

问题描述 投票:0回答:1

我有一个桌面应用程序,它使用 .NET Core 8 和 EF Core 以及 SQL Server。

当我需要测试迁移时,我通常会删除生成的数据库,但是每当我启动应用程序时,我就会突然收到这个奇怪的错误。

与服务器成功建立连接,但随后出现 登录过程中发生错误。 (提供者:共享内存 提供商,错误:0 - 管道的另一端没有进程。

连接字符串示例

“服务器=XXXXX\XXXXX;数据库=XXXXX;用户 ID=sa;密码=XXXXX;TrustServerCertificate=true;"

  1. 现在我说奇怪的原因是,我只在数据库不再存在时收到此错误,当我使用 SSMS 创建一个没有表的新数据库时,当然我会收到与数据库模型(又名表类)相关的错误预计数据库为空。

  2. 另一件事是,同一个解决方案有一个 ASP.net core 项目,它也使用相同的 SQL 服务器和凭据,但不同的数据库名称也可以正常工作。 (也使用桌面项目中的相同名称不会引发问题)

  3. 我也可以使用 SSMS 使用凭据登录,没有任何问题。

  4. SQL服务器是为了测试,在同一台机器上,所以没有使用远程连接,但我尝试使用TCP启用命名管道,仍然是同样的问题。

我提到 2、3 和 4 的原因是,当我搜索错误消息时,所有结果都指向错误的凭据、未启用 SQL Auth 或未启用命名管道,而 TCP 显然没有启用其中就是我的情况。

我的情况似乎与数据库不存在这一事实有关,这对于 EF Core 来说不应该是问题,因为它应该像往常一样使用连接字符串中的数据库名称通过迁移生成。

有人对此有什么想法吗?

sql-server .net-core entity-framework-core connection-string
1个回答
1
投票

我发现了真正的问题,最近的代码更新之一是在迁移代码发生之前使用 DbContext,因此 EF 核心期望数据库已经存在。

感谢 akseli,他在拉取请求的代码时给了我一个想法,以便在迁移发生之前跟踪代码。

© www.soinside.com 2019 - 2024. All rights reserved.