实体框架在 Visual Studio 中失去与连接字符串的绑定

Posted

技术标签:

【中文标题】实体框架在 Visual Studio 中失去与连接字符串的绑定【英文标题】:Entity Framework losing binding to connection string in Visual Studio 【发布时间】:2011-07-21 18:10:30 【问题描述】:

我遇到了一个问题,实体框架 edmx 文件显然失去了与构建它的连接字符串的关系。

我的 .edmx 文件的设计器运行良好 - 我可以执行“从数据库更新”,它总是会跳转到允许我添加表、过程等的向导步骤。现在,当我单击“更新自数据库”,我得到“选择您的数据连接”向导步骤,它希望我选择一个新数据库 - 如果我完成这些步骤,它将为我创建一个新的连接字符串,并重新生成所有对象,就好像我从头开始。

我的 app.config 文件的内容与问题之前完全相同,但我确实修改了该文件,然后将其恢复为原来的样子。我在想以某种方式修改这个文件会触发一些导致我失去绑定的东西,但我不知道那是什么。

配置文件中的连接字符串键与 EDMX 文件中的 CdmEntityContainer 属性匹配。

我什至尝试过终止我的代码库并从源代码管理中重新签出,但这似乎不起作用。在同一代码库上工作的其他人也遇到了同样的问题,所以项目中的某个地方似乎肯定有问题。但是 .csproj 或 .sln 文件没有相关的更改 - 我在任何地方都看不到可能导致这种情况的任何内容。

有什么想法吗?我现在看到的唯一解决方案是从头开始删除并重新创建 edmx 文件,但我绝对希望找到更好的解决方案。

编辑:如果我在项目中生成一个全新的 edmx,与任何现有的无关,它似乎可以修复其余部分。它必须“重置”项目中任何时髦的东西。但这不可能是一个合法的解决方案,所以我仍然希望有更好的解决方案。

【问题讨论】:

不知道为什么重启mysql服务解决了 这在 VS 2015 中仍然是个问题。 【参考方案1】:

我刚遇到这个问题,在我的连接字符串中我丢失了

application name=数据源中的EntityFramework

【讨论】:

在某些时候,他们似乎已将其从“App=EntityFramework”更改为“application name=EntityFramework”。【参考方案2】:

我刚刚解决了这个问题。

问题是 edmx 被用作我的 DAL,具有自己的项目和 Web 配置,并且 DAL 由我的 ASP.NET 项目(解决方案的默认项目)使用 ITS 自己的 Web 配置调用。

配置多年来一直相同,但 ASP.NET 项目指向另一台服务器(即连接字符串已更改)。即使 DAL 的连接字符串仍然未更改、有效并且当您想在设计时“从数据库更新模型”时不涉及 ASP.NET 项目,它必须与默认项目与之冲突有关。

我将包含 edmx 的项目的 web 配置中的 connstring 更改为与默认项目的相同,它再次工作。

【讨论】:

【参考方案3】:

如果您在出现此问题时碰巧在环境(例如 dev、prod)之间跳跃,并且您在这些环境中运行不同的 SQL Server 版本(例如 2005、2008),您可能会遇到一些问题。数据库版本号存储在 .edmx 文件中的某个位置。

如果是这种情况,请告诉我,我可以挖掘细节并做出回应。如果不是,我不知道会是什么。

祝你好运!

编辑:我意识到这可能与实际问题无关,但我想提供我提到的细节以防其他人遇到此问题。 Schema 元素(在 .edmx 内)中的 ProviderManifestToken 属性包含数据库版本号。请注意,它实际上使用年份(例如 2005、2008)而不是真正的数据库版本号。如果您在一个版本上创建模型并将其移动到另一个版本,则需要手动编辑文件以更改此值。

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
      <Schema Namespace="..." Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
        ...
      </Schema>
    </edmx:StorageModels>
  </edmx:Runtime>
</edmx:Edmx>

【讨论】:

一切都在 SQL 2005 上,EDMX 文件本身没有改变。【参考方案4】:

老问题,但我想我会为那些仍然有这个问题的人发布对我有用的修复程序。就我而言,这只是一个密码问题。我正在测试中,但连接字符串正在使用生产密码。 VS 更有用的响应可能是显示“无效的登录名或密码”类型的消息,因为这实际上是问题所在。

【讨论】:

以上是关于实体框架在 Visual Studio 中失去与连接字符串的绑定的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中使用实体框架与 SQL Server 的连接问题

在 Visual Studio 2015 中安装实体框架缺少支持的标签

由于 dotnet ef dbcontext --json 失败,无法在 Visual Studio 2019 中列出实体框架迁移

如何在 Visual Studio 2013 中为 sqlite 配置实体框架 6

无法读取 sqlite 数据库,使用 Visual Studio 2013 中的实体框架

添加 Mysql 实体框架时,Visual Studio 中的表“dbname.dbname.tablename”不存在错误