如何重新创buildentity framework的数据库?

我的ASP.Net MVC 5项目使用Code-Firstentity framework进入了一个糟糕的状态。 我不在乎丢失数据,我只想从头开始,重新创build数据库并开始使用Code-First迁移。

目前,我处于每次尝试更新数据库都会导致抛出exception或收到错误消息的状态。 此外,该网站无法正确访问数据库。 我如何擦除所有迁移,重新创build数据库,并从头开始,而不必创build一个新的项目? 换句话说,我想保留我的代码,但删除数据库。

后来我也想同步部署数据库(Azure上的SQL Server)。 再次,我不介意放弃所有的数据 – 我只是想让它工作。

请提供任何操作步骤以恢复到清洁状态。 非常感激。

按以下步骤操作:

1)首先到Visual Studio的服务器资源pipe理器中,检查这个项目的“.mdf”数据连接是否连接,如果是的话,右键单击并删除。

2)转到解决scheme资源pipe理器,单击显示所有文件图标。

3)转到App_Data,右键单击并删除该项目的所有“.mdf”文件。

4)右击删除Migrations文件夹并删除。

5)转到SQL Server Management Studio,确保该项目的数据库不存在,否则删除它。

6)在Visual Studio中打开包pipe理器控制台,然后键入:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7)运行你的应用程序

注意:在步骤6的第3部分中,如果出现“无法附加文件…”错误,可能是因为您没有在SQL Server中完全删除数据库文件。

我想补充一点,林的答案是正确的。

如果您不正确地删除密度板,您将不得不修复它。 将项目中的拧紧连接固定到MDF。 简短的回答; 重新创build并正确删除它。

  1. 创build一个新的MDF并将其命名为与旧的MDF相同,将其放在相同的文件夹位置。 您可以创build一个新项目并创build一个新的mdf。 mdf不必与旧表匹配,因为要删除它。 因此,创build或复制一个旧的正确的文件夹。
  2. 在服务器资源pipe理器中打开它[双击从解决scheme资源pipe理器的MDF]
  3. 在服务器浏览器中删除它
  4. 从解决scheme资源pipe理器删除
  5. 运行update-database -force [必要时使用force]

完成,享受你的新分贝

更新 11/12/14 – 我一直使用这个,当我做一个突破数据库更改。 我发现这是将迁移回滚到原始数据库的好方法:

  • 把数据库放回原来的位置
  • 运行正常的迁移将其恢复到当前状态

    1. Update-Database -TargetMigration:0 -force [这将销毁所有表和所有数据。]
    2. Update-Database -force力量[如果需要使用武力]

这对我工作:

  1. 从Visual Studio中的SQL Server对象资源pipe理器中删除数据库。 右键单击并select删除。
  2. 从文件系统中删除mdf和ldf文件 – 如果它们仍然存在的话。
  3. 重build解决scheme。
  4. 启动应用程序 – 数据库将被重新创build。

只是想添加@Lin的优秀答案:

5)B.如果您没有SQL Management Studio,请转到“SQL Server对象资源pipe理器”。 如果在localdb“SQL Server对象资源pipe理器”中看不到你的项目数据库,那么点击“添加SQL服务器”button将其手动添加到列表中。 然后你可以从列表中删除数据库。

虽然这个问题的前提是不关心数据,但有时维护数据是必不可less的。

如果是这样的话,我写了一个关于如何从Entity Framework噩梦中恢复的步骤列表,当数据库中已经有了同名的表时: 如何从Entity Framework中恢复梦魇 – 数据库已经有了同名的表

显然…一个主持人看到适合删除我的post,所以我会粘贴在这里:

如何从entity framework噩梦中恢复 – 数据库已经有同名的表

描述 :如果您的团队是EF新手,那么您就像我们一样,最终会处于无法创build新本地数据库的状态,或者无法将更新应用于生产数据库。 你想回到一个干净的EF环境,然后坚持基本的,但你不能。 如果你得到它的生产工作,你不能创build一个本地数据库,如果你得到它的本地工作,你的生产服务器不同步。 最后,您不想删除任何生产服务器数据。

症状 :无法运行更新数据库,因为它正在尝试运行创build脚本,并且数据库已经具有相同名称的表。

错误消息:System.Data.SqlClient.SqlException(0x80131904):数据库中已经有一个名为“'的对象。

问题背景 :EF基于数据库中的一个表dbo .__ MigrationHistory,了解当前数据库的位置与代码的位置。 在查看迁移脚本时,它会尝试重新调整脚本的最后位置。 如果不能,它只是试图按顺序应用它们。 这意味着,它返回到最初的创build脚本,如果你看UP命令的第一部分,它将成为错误发生在表的CreeateTable。

为了更详细地了解这一点,我build议观看这里引用的两个video: https : //msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx

解决scheme :我们需要做的是诱使EF认为当前数据库是最新的,而不应用这些CreateTable命令。 同时,我们仍然希望这些命令存在,以便我们可以创build新的本地数据库。

第1步:生产数据库清理首先,对生产数据库进行备份。 在SSMS中,右键单击数据库,select“任务>导出数据层应用程序…”并按照提示进行操作。 打开您的生产数据库并删除/删除dbo .__ MigrationHistory表。

第2步:本地环境清理打开您的迁移文件夹并将其删除。 我假设你可以得到这一切从GIT回来,如果有必要的。

步骤3:重新创build初始化在软件包pipe理器中,运行“Enable-Migrations”(如果您有多个上下文,EF将提示您使用-Co​​ntextTypeName)。 运行“添加迁移初始-verbose”。 这将创build初始脚本来根据当前代码从头开始创build数据库。 如果您在之前的Configuration.cs中有任何种子操作,那么将其复制。

步骤4:窍门EF在这一点上,如果我们运行更新数据库 ,我们会得到原来的错误。 所以,我们需要让EF认为它是最新的,而不运行这些命令。 因此,请在刚创build的初始迁移中进入Up方法,并将其全部注释掉。

步骤5:更新数据库在Up过程中没有执行代码的情况下,EF将使用正确的条目创builddbo .__ MigrationHistory表,以便正确运行此脚本。 去看看,如果你喜欢。 现在,取消注释该代码并保存。 你可以再次运行更新数据库 ,如果你想检查EF认为它是最新的。 它不会用所有的CreateTable命令运行Up步骤,因为它认为它已经完成了。

第6步:确认EF实际上是最新的如果你的代码还没有应用到它的迁移,这就是我做的…

运行“Add-Migration MissingMigrations”这将创build一个实际上是空的脚本。 由于代码已经存在,实际上在初始迁移脚本中有正确的命令来创build这些表,所以我只是将CreateTable和等效的放置命令切换到Up和Down方法中。

现在,再次运行Update-Database并观察它执行新的迁移脚本,在数据库中创build适当的表。

第7步:重新确认并提交。 build立,testing,运行。 确保一切正在运行,然后提交更改。

第八步:让其他人知道如何进行。 当下一个人更新时,如果之前运行的脚本不存在,EF将不知道是什么命中。 但是,假设本地数据库可以被删除并重新创build,这是很好的。 他们将需要删除他们的本地数据库,并添加从EF重新创build它。 如果他们有本地更改和未完成的迁移,我build议他们在主服务器上再次创build他们的数据库,切换到他们的function分支,并从头开始重新创build这些迁移脚本。

一个可能的非常简单的修复程序,为我工作。 在删除了在server / serverobject资源pipe理器中find的任何数据库引用和连接之后,右键单击App_Data文件夹(没有在应用程序中显示任何对象)并select打开。 一旦打开把所有的数据库/等。 文件在备份文件夹或如果你有胆量只是删除它们。 运行你的应用程序,它应该重新创build所有的东西。

我的解决scheme最适合于
– 删除你的mdf文件
– 想重新创build你的数据库。

为了重新创build数据库,您需要使用Visual Studio添加连接。

第1步 :转到服务器资源pipe理器添加新连接(或查找添加数据库图标)。

步骤2 :将数据源更改为Microsoft SQL Server数据库文件

步骤3 :在“ 数据库文件名”字段中添加所需的任何数据库名称(最好在web.config的AttachDbFilename属性中具有相同的名称)

步骤4 :点击浏览并导航到您想要的位置。

第5步 :在包pipe理器控制台中运行命令update-database