首页 > 解决方案 > 格式化磁盘后找不到我的 SQL Server 数据库

问题描述

我正在使用实体框架开发 C# 应用程序,在该应用程序中以两种模式(手动/自动)查询 SQL Server 数据库。我对现有数据库使用了代码优先的方法。

手动模式正在工作,我开始使用自动模式。我的电脑需要格式化,所以我拿了一份我的项目的副本(它在D:\)。格式化后,我重新安装了 Visual Studio 并继续在我的项目中的另一条路径上工作。

检查 SQL Server 对象资源管理器我没有找到我以前拥有的数据库表

[SQL_ServerObjectExplorer] 1

我尝试刷新但结果相同。

那么,我的数据库表去了哪里?

标签: c#sql-serverentity-framework

解决方案


该数据库很可能存在,因为您的应用程序代码在找不到默认数据库时会创建一个默认数据库。这是启用迁移的 EF Code First 的默认实现。

那么,我的数据库表去了哪里?

重新格式化清除了所有内容,但您的代码似乎没有配置必要的迁移步骤来创建所需的表,或者您的迁移策略未设置为自动升级到最新版本。

另一个第一次很难注意到的问题,如果没有仔细管理迁移,特别是在项目开始时或者这是您的第一个Code-First项目时,如果在迁移执行期间出现 SQL 或其他异常,那么迁移将不会被执行。

我会首先尝试在包管理器控制台中运行以下命令:

update-database

我知道很简单......如果您在代码中启用了自动迁移,但您不处理引发的异常,那么它只会让用户看起来好像应用程序没有加载。因此,从 VS 中执行迁移并检查输出。

如果没有要应用的迁移,那么您的代码中没有要实际应用的迁移,这可能意味着您正在手动或通过其他技术管理数据库模式,或者配置出现其他问题,这完全是主观的到您的特定项目环境,并且超出了 SO 帖子的范围。

但是...您可以将所有这些短路并运行以下命令以尝试生成新的迁移以将您从零带到您的编码模式现在所在的位置:

add-migration AfterFormat

如果这会生成一个空的新迁移脚本,则没有任何更改,如果是这种情况,那么您只是使用了错误的连接字符串,或者您的 EF DbContext 中没有定义表...


推荐阅读