如何在 Visual Studio 中创建测试数据库?

How can you create a test database in Visual Studio?

我们有一个学校项目,我们必须在其中创建一个 Web 应用程序。我们可以访问在线数据库,但问题是我们必须先通过 VPN 连接才能连接到它。

出于这个原因,我们正在寻找一个我们可以使用的本地数据库(我想应该在项目中吧?)(项目在颠覆服务器上)的可能性。但是当我们在部署服务器上部署项目时,我们希望它使用真实的数据库连接。

我想我以前见过它,但搜索了几个小时后我找不到任何相关内容。

这可能吗?

编辑:

我们将 MVC5 与 Entity Framework 结合使用。

您可以使用 Entity Framework 创建一个本地数据库,它将数据库文件保存在本地文件系统中,您可以将其推送到您的版本控制服务器以与您的同事共享。如果您决定部署数据库,您可以 generate an sql script 也可以 运行 在生产数据库上。您可以使用 SQL Management Studio 连接到本地数据库来执行此操作。部署后,您只需要修改已发布应用程序的连接字符串即可。

您以前可以使用 Sql Server Express,但它已更改为 LocalDB,并且可以在本地安装和 运行。

http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx

https://msdn.microsoft.com/en-us/library/ms233763.aspx

人们通常会根据您想要实现的目标以多种方式之一来执行此操作。

  • 将数据库下载为 mdf 文件并将其存储在您的存储库中。然后你可以在安装过程中有一个手动步骤,你要求人们将它导入他们的数据库(我推荐 localdb 进行本地开发,但当然,你可以使用 sql 服务器或其他东西)。
    • 优点:对于安排人员来说设置起来非常简单。
    • 缺点:手动步骤对新手来说难度较大。如果数据库很大,它会使您的存储库膨胀。如果一个开发人员更改了数据库(例如通过添加一列),那么您必须让每个人都知道删除他们的副本并从备份中恢复。此外,没有关于您的数据库如何更改的真正明确的历史记录,并且您的测试数据库没有与您为部署所做的任何事情集成。
  • 将数据库下载为 mdf 文件。将此文件包含在您的项目中并将其属性设置为 Content/Copy if Newer。然后直接使用它使用连接字符串来附加Db,例如Server=(localdb)\v11.0;AttachDbFilename=.\MyDataFile.mdf;Database=dbname;
    • 优点:无需手动操作,一切正常
    • 缺点:显然你想为 AttachDbFilename 使用相对路径,我不是 100% 支持它。此外,与上面相同,但不必让每个人知道他们的数据库何时需要恢复,它只是在幕后恢复。这可能意味着用户突然看到他们的数据在没有通知的情况下消失了。由于数据库文件锁定等原因,它有时也会失败,每个人都必须善于注意这一点。
  • 维护一个 sql 脚本,可以在 localdb 中重新创建您的数据库。为人们提供 powershell 或批处理脚本(也在源代码管理中)以轻松 运行 它。可选择使用 post-build 脚本来确定您是否需要重新创建数据库并 运行s 它。
    • 优点:一切都非常明确。存储库中的大小相当小(应该能够有效地存储文本)。您可以使用相同的脚本作为部署的一部分。
    • 缺点:设置工作较多。仍然没有真正的方法来部署 对现有数据库的更改
  • 首先使用Entity Framework数据库。我无法说出执行此操作时的过程到底是什么样的,但我知道这是可能的。
    • 优点:我猜。
    • 缺点:Ewwww EF 数据库优先
  • 使用 Entity Framework Code First 进行迁移。使用显式迁移(而不是愚蠢的 auto-generate-my-entire-db cruft)并编写适当的 Seed 方法来填充您的数据。
    • 优点:这是专业开发人员所做的,并且基于 Rails、Django 和许多其他框架经常使用的测试模式。它非常灵活和明确,支持更改现有数据库。
    • 缺点:如果您没有经验,特别是如果您不了解迁移模式,则可能很难设置。有一些命名困难使得 google 有点困难(数据库优先 EF 与代码优先 EF,显式迁移与自动生成数据库,几种不同的 Seed 方法取决于您的初始化程序)。