【问题标题】:How does one Attach to an MDF file created by Code First using Server Explorer如何使用服务器资源管理器附加到 Code First 创建的 MDF 文件
【发布时间】:2015-01-28 20:17:26
【问题描述】:

鉴于: 代码优先技术(所有正确完成和验证)。实际上,我可以在应用程序中看到从程序添加的记录。这意味着所有 SaveChanges 和后续查询都在工作。

问题: 我想将此数据库公开给另一个程序,但无法让服务器资源管理器数据连接附加到它...

你尝试了什么?

  1. 在 VS2013 中,我打开服务器资源管理器,单击添加连接并 输入这个(在将 DataSource 更改为 SQLClient 而不是 默认数据库文件设置) : (LocalDb)\V11.0 然后点击 关于“选择或输入数据库名称”显示的表格未显示 新的数据库表。

  2. 然后我尝试输入 MYProject.MYDBContent 没有用。

  3. 然后我切换到“附加数据库文件”复选框并 找到创建的文件。 (是的!)但是当试图 打开它说它无法打开,因为它是782版,这个 服务器支持版本 706 及更早版本。后来,消息说 也“存在同名数据库,或指定文件不能 被打开,或者它位于 UNC 共享上。”

环境

我正在使用 VS2013 并使用 NUGET 下载 EF 6.0.2,但是当我 查看参考区域中的 EF 告诉我它仍然是版本 4.0....

我的系统同时安装了 SQL Server 2012 和 2014(本地数据库)。这一定是问题的根本原因。

想法?

Visual Studio 2013、EF 6.0.1 和 SQL Express 2012 在使用 Code First 时不能很好地协同工作。问题是生成了 MDF 文件,但使用服务器资源管理器数据连接进行连接的任何尝试都失败,并出现上面的 782 错误消息以及 SQL 2012 的 SSMS。即使您的系统没有安装 SQL 2014,MDF 文件版本也认为是2014文件版!

如果您删除一个 MDF 文件(如我所做的那样)尝试创建 MDF 失败(无法附加文件错误),那么只需重命名 DBContext 类名,您将获得一个新的 MDF 文件!

环境:

【问题讨论】:

  • 如果您还安装了 SQL Server Express,请查找以您的连接字符串名称命名的数据库。
  • 好的,可能已经找到根本原因...我的系统同时安装了 SQL 2014 和 2012。当我删除 2012 现在我的项目不会写入数据。我删除了 MDF 文件并重新运行它以尝试让它使用 2014,没有骰子。下一步将是删除 SQL 2014 重新安装 2012 ......将回发结果......这告诉我 EF 或 Visual Studio 并非普遍使用相同版本的 SQL Server 来执行创建和连接/管理的东西.
  • 您是否验证过您的 Visual Studio 的 SqlServer 数据库工具是最新的?检查扩展更新。另外,你说EF显示的版本仍然是4.0?运行时版本,还是实际版本?
  • 好的新更新,我创建了一个全新的 MVC 代码第一个项目,在安装 SQL Express 2012 后编译并运行它。它运行良好,创建 MDF 文件并显示应用程序添加的内容。它添加默认连接字符串如下:
  • 在我删除 SQL 2012 和 2014 之前,在我重新安装 SQL 2012 Express 后,一切都使用 LocalDB,VS 现在只会使用 SQL Express.... 有没有告诉 VS 使用本地?

标签: c# entity-framework


【解决方案1】:

(LocalDb)\V11.0 然后点击“选择或进入数据库 name" 显示的表没有显示新的数据库表。

您可以使用此方法成功连接,因为它使用您安装的 2014 SQL Express LocalDB。为什么某些表没有显示可能与 Code First 决定部署更新的方式/时间有关。我可能会坚持通过 localdb 连接并专注于调查该问题。

从服务器资源管理器附加 MDF 使用 SQL Server 实例。您没有安装 2014 实例。 2014 LocalDB 不足以满足此要求。 请参阅此问题,该问题强调通过服务器资源管理器附加 MDF 需要 SQL Express 实例: How to add SQL Server database file (.mdf) in Visual Studio without installing SQL Server Express Edition?

您的默认安装支持通过 localdb 连接。因此,如果您通过 localdb 连接,它确实可以“协同工作”。如果要连接到 MDF 文件,则需要安装 2014 SQL Express 的服务器实例。

但是,如果我站在你的立场上,我会坚持通过 localdb 进行连接,并探索为什么“显示的表没有显示新的数据库表。”

但是,如果您打算共享数据库,那么正如 Erik 指出的那样,localdb 将无法工作。您需要将连接指向 SQL Server 实例,并让代码优先和/或代码优先迁移在实例中为您创建数据库。然后,您将连接到服务器实例,而不是通过 localdb 或 MDF 连接。

如果您将连接字符串指向 SQL Server 实例,而不是使用 MDF 或 localdb 语法,那么 Code First 应该在您指向的任何 SQL Server 实例中创建数据库。这意味着您指向的任何版本都将是它创建的版本。 IE。如果您的连接字符串指向 SQL Server 2012 Developer Edition 的实例,则该数据库将是在该实例中创建的 2012 版本数据库。

【讨论】:

  • 感谢 Aaron 的建设性回复。我从没想过要查看 Machine.Config 认为在我的情况下 Web.Config 会覆盖。我计划今天卸载 SQL 2012 Express 并安装 SQL2014 express 以匹配 Code First 正在做的事情,即创建标记为 2014 格式的 MDF。我会发回结果。
【解决方案2】:

问题:我想将此数据库公开给另一个程序...

我可以描述 LocalDb 的最佳方式是作为 Sql Server 实例的内存版本(可能类似于 Sql Express)。这意味着任何使用 LocalDb 连接到 Mdf/Ldf 的应用程序都将拥有对该文件的独占访问权限,但它不能被另一个实例使用。

如果您需要跨多个应用程序共享数据,这就是 Sql Server Express 及更高版本的用途。

我正在使用 VS2013 并使用 NUGET 下载 EF 6.0.2,但是当我在参考区域中查看 EF 时告诉我它仍然是 4.0 版......

我不确定该图像是否是您在撰写本文时所查看的当前版本,但该图像显示为 .Net 运行时 4.0 设计的 6.0 版本。这对我来说是正确的。

Visual Studio 2013、EF 6.0.1 和 SQL Express 2012 在使用 Code First 时不能很好地协同工作。

我不知道你为什么要这么说。我已经编写了 3 个项目,没有任何问题。我感觉你不明白 LocalDb 和 Sql Server Express 是完全独立的两个产品

如果您将 LocalDb 与 AttachDbFilename 一起使用,那么当您的应用程序完成运行 database is dropped from the instance

摘录:

使用 AttachDBFilename 连接字符串关键字将数据库添加到您的 LocalDB 实例。使用AttachDBFilename时,如果不使用Database连接字符串关键字指定数据库名称,应用程序关闭时数据库将从LocalDB实例中移除。

所以...

如果您删除 MDF 文件(如我所做的那样),则尝试创建 MDF 失败(无法附加文件错误)。

这是因为在 Visual Studio 打开时缓存了连接。重命名 DbContext 会创建一个新连接并创建一个新的缓存版本。

我想将此数据库公开给另一个程序,但无法让服务器资源管理器数据连接附加到它..

只有任何版本的 Sql Server(LocalDb、Express、Standard 等)的单个实例可以打开数据库。如果您想在使用 Express 或更高版本的应用程序之间共享数据,则不能使用 LocalDb。

【讨论】:

  • "我不知道你为什么要这么说" 仅仅因为创建 MDF 文件的项目不允许服务器资源管理器添加数据库连接,它告诉我 MDF 版本适用于 SQL 2014 时我没有安装!我说的很清楚。请再读一遍。
  • 好吧,为什么 VS2013 会创建那个版本的 MDF 并且 ADD Connection 应用程序不会打开同一个 MDF 文件。
【解决方案3】:

Visual Studio 2013、EF 6.0.1 和 SQL Express 2012 在使用 Code First 时不能很好地协同工作。问题是生成了 MDF 文件,但使用服务器资源管理器数据连接进行连接的任何尝试都失败,并出现上面的 782 错误消息以及 SQL 2012 的 SSMS。即使您的系统没有安装 SQL 2014,MDF文件版本认为是2014文件版本!

答案: 如果您删除了 MDF 文件(如我所做的那样)并且随后尝试创建 MDF 失败(无法附加文件错误),那么只需重命名 DBContext 类名,您将获得一个新的 MDF 文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2021-01-26
    相关资源
    最近更新 更多