为什么我的代码优先 ASP.NET MVC 应用程序突然无法运行只是因为我从另一个位置打开它?

Why does my code-first ASP.NET MVC app suddenly not work just because I opened it from another location?

我有一个代码优先 ASP.NET MVC 应用程序,它 运行 顺利并且能够从 SQL 服务器访问数据,直到我将项目复制到另一个位置并打开它从那里。

我收到以下错误:

System.Data.DataException
HResult=0x80131501
Message=An exception occurred while initializing the database. See the InnerException for details.
Source=

StackTrace:

Inner Exception 1:
EntityException: The underlying provider failed on Open.

Inner Exception 2:
SqlException: Database 'C:\Users\BICHE\Desktop\FinalCSharpChallenge\FinalCSharpChallenge\App_Data\StudentContextDB.mdf' already exists. Choose a different database name.
Cannot attach the file 'C:\Users\BICHE\Desktop\MY REPOS3\The-Tech-Academy-C-Coding-Project\FinalCSharpChallenge\FinalCSharpChallenge\App_Data\StudentContextDB.mdf' as database 'StudentContextDB'.

我的问题是:为什么仅仅因为我将项目从我的桌面移动到我计算机上的另一个位置就会发生这种情况?

是否可以通过创建一个 "if" 语句来解决这个问题,该语句如果 StudentContextDB 存在则继续使用它,如果不存在则创建它? (我的导师建议这样做,所以我想我会先尝试一下)

最后,如果这是正确的解决方案,那么该特定语句的语法是什么?我看过有关放置和创建的说明,但没有看到使用或创建的说明。

我感谢人们对这个问题的任何见解!

这里的简短版本是数据库服务器仍然引用数据库的旧位置。您移动了它并尝试启动应用程序并指向具有相同名称的数据库的新位置。数据库服务器不知道如何处理。最好从数据库服务器上分离数据库,然后移动文件。

SqlException: Database '...' already exists. Choose a different database name.

看起来您的代码正在尝试重新创建数据库...如果这是一个新部署,您可能需要一个新数据库;您应该修改您的代码,使数据库位置相对于您的应用程序主目录相对

另一个好处是,如果你把你的应用程序交给其他人,他们会在你定义的相对路径下在他们的计算机上创建他们的数据库,这样也可以轻声播放。