不支持关键字:“数据源”初始化实体框架上下文
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=&quot;0;App=EntityFramework&quot;
,它现在说找不到密钥:提供者名称。我也尝试过providerName=...
而不是provider name=
,但没有运气。
好吧,我开始使用EntityConnectionStringBuilder
类创建它,奇怪的是,它现在可以工作了。但我仍然不知道为什么它不接受我的字符串,即使有你的添加。【参考方案4】:
信不信由你,将 LinqPad.exe.config 重命名为 LinqPad.config 解决了这个问题。
【讨论】:
这是微软,任何事情都有可能发生! 这没有意义。 Linqpad 与这个问题有什么关系?重命名可执行文件有什么帮助? 好吧,在我的情况下,Linqpad 发生了这个特殊错误,这样做解决了它。而且我没有重命名可执行文件。我将 .exe.config 重命名为 .config。 无论如何,这是一个非常具体的场景。它只会增加噪音,因为它没有解释任何东西,【参考方案5】:只需使用 \" 而不是 ",它应该可以解决问题。
【讨论】:
【参考方案6】:确保您的连接字符串中有Data Source
而不是DataSource
。空间很重要。相信我。我是个白痴。
【讨论】:
以上是关于不支持关键字:“数据源”初始化实体框架上下文的主要内容,如果未能解决你的问题,请参考以下文章