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


161

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

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中获取了连接字符串,并仅修改了文件的路径(该文件是我动态设置的),并且不使用默认值,而是明确使用了该连接字符串。是什么导致此错误?


2
请参考stackoverflow.com/questions/6003085/...一种不同的方法
LCJ

1
我不知道是谁提出的metadata=res:,然后res=somethingelse"整个地方的语法-但是他们应该很高兴他们现在不在我的同一个房间里:-/
Simon_Weaver

SqlClient连接字符串不需要2018 .Net EF Core类似语法错误-providerName。对于EF核心,字符串中也没有引号或滴答。
Sql Surfer

Answers:


321

出现此错误的真正原因是由于"连接字符串中的值。

如果您用单引号将其替换,则可以正常工作。

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

(发布后,其他人可以比我更快地得到修复。)


1
如果要将连接字符串传递给ObjectContent类,请确保它具有单引号。如果您是从.config文件获取连接,则可以使用“ 转义序列。
迈克·斯托尼斯

这就是为我解决的问题。
GiddyUpHorsey,2012年

对于不熟悉XML的工作原理的人,请"使用引号的转义序列,因为它是XML中的保留字符。
维维安河

1
感谢其现在的工作
Shivam Srivastava 2013年

System.Data.EntityClient.EntityConnectionStringBuilder为我做了,谢谢。
AFract

37

即使使用Entity Framework,我也改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" />

2
为我工作!+1
Yury Kerbitskov '16

6
上面的更改可能会导致(例如,在我的情况下)以下错误“上下文在代码优先模式下使用了从EDMX文件为数据库优先或模型优先开发而生成的代码”
Psi-Ed

您可以在OnModelCreating()中注释抛出新的UnintentionalCodeFirstException(),但看起来像一个肮脏的解决方法
Alexander Ulmaskulov

14

这似乎缺少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=太多,但没有运气。
CanPoyrazoğlu2011年

2
好了,我开始使用EntityConnectionStringBuilder该类创建它,而且很奇怪,它现在正在运行。但是我仍然不知道为什么它不接受我的字符串,即使添加了您的字符串也是如此。
CanPoyrazoğlu2011年

3

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


12
这是微软,任何事情都可能发生!
Altaf Patel 2015年

这没有道理。Linqpad与该问题有什么关系?重命名可执行文件将如何有所帮助?
Gert Arnold

好吧,在我的案例中,Linqpad发生了此特定错误,解决了该问题。而且我没有重命名可执行文件。我将.exe.config重命名为.config。
Sameer Alibhai

无论如何,这是一个非常特殊的场景。它只会增加噪音,因为它不能解释任何内容,
Gert Arnold


1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.