【问题标题】:Keyword not supported: "data source" initializing Entity Framework Context不支持关键字:“数据源”初始化实体框架上下文
【发布时间】:2011-10-23 05:54:46
【问题描述】:

我正在初始化实体框架对象上下文,这给了我关键字不支持的错误:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

我直接从正在工作的 web.config 中获取连接字符串,并且只修改了文件的路径(我动态设置),而不是使用默认值,而是显式地使用了这个连接字符串。什么可能导致此错误?

【问题讨论】:

  • 请参考stackoverflow.com/questions/6003085/… 了解不同的方法
  • 我不知道是谁想出了这个metadata=res:,然后是res=somethingelse" 到处都是语法——但他们应该很高兴他们不在同一个房间里就像我现在:-/
  • 2018 .Net EF Core 类似语法错误 - SqlClient 连接字符串不需要 providerName。 EF 核心的字符串中也没有引号或刻度。

标签: entity-framework connection-string


【解决方案1】:

您收到此错误的真正原因是您的连接字符串中的 " 值。

如果你用单引号替换它们,那么它会正常工作。

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(发布以便其他人可以比我更快地获得修复。)

【讨论】:

  • 如果您将连接字符串传递给 ObjectContent 类,请确保它有单引号。如果您从 .config 文件获取连接,则可以使用“”转义序列。
  • 这是为我解决的问题。
  • 对于那些不熟悉 XML 工作原理的人来说," 是引号的转义序列,因为它是 XML 中的保留字符。
  • 感谢它现在的工作
  • System.Data.EntityClient.EntityConnectionStringBuilder 为我制作的,谢谢。
【解决方案2】:

我通过将EntityClient 改回SqlClient 来解决此问题,即使我使用的是实体框架。

所以我的完整连接字符串格式为:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />

【讨论】:

  • 为我工作! +1
  • 上述更改可能会导致(在我的情况下)以下错误“上下文正在 Code First 模式下使用,其中代码是从 Database First 或 Model First 的 EDMX 文件生成的发展”
  • 您可以在 OnModelCreating() 中注释 throw new UnintentionalCodeFirstException(),但它看起来像一个肮脏的解决方法
【解决方案3】:

这似乎缺少providerName="System.Data.EntityClient" 位。确定你掌握了全部内容?

【讨论】:

  • 好吧,那是另一个属性,忘了那个。现在添加它是metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&amp;quot;{0};App=EntityFramework&amp;quot;,它现在说找不到密钥:提供者名称。我也尝试过providerName=... 而不是provider name=,但没有运气。
  • 好吧,我开始使用EntityConnectionStringBuilder 类创建它,奇怪的是,它现在可以工作了。但我仍然不知道为什么它不接受我的字符串,即使有你的添加。
【解决方案4】:

信不信由你,将 LinqPad.exe.config 重命名为 LinqPad.config 解决了这个问题。

【讨论】:

  • 这是微软,任何事情都有可能发生!
  • 这没有意义。 Linqpad 与这个问题有什么关系?重命名可执行文件有什么帮助?
  • 好吧,在我的情况下,Linqpad 发生了这个特殊错误,这样做解决了它。而且我没有重命名可执行文件。我将 .exe.config 重命名为 .config。
  • 无论如何,这是一个非常具体的场景。它只会增加噪音,因为它没有解释任何东西,
【解决方案5】:

只需使用 \" 而不是 ",它应该可以解决问题。

【讨论】:

    【解决方案6】:

    确保您的连接字符串中有Data Source 而不是DataSource。空间很重要。相信我。我是个白痴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多