不支持关键字:“数据源”初始化实体框架上下文

Posted

技术标签:

【中文标题】不支持关键字:“数据源”初始化实体框架上下文【英文标题】: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 中获取连接字符串,并且只修改了文件的路径(我动态设置),而不是使用默认值,而是显式地使用了这个连接字符串。什么可能导致此错误?

【问题讨论】:

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

【讨论】:

以上是关于不支持关键字:“数据源”初始化实体框架上下文的主要内容,如果未能解决你的问题,请参考以下文章

实体框架,无法创建类型为“XX”的常量值。此上下文仅支持原始类型或枚举类型

Expression.Invoke 在实体框架中?

实体框架始终包含上下文中的数据,即使我不要求它

了解实体框架启用迁移和上下文

实体框架,查询包含上下文更改的dbset,而不调用保存更改

实体框架可选的一对一关系不起作用