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

171

我正在初始化Entity Framework Object context,但出现了“不支持的关键字”错误:

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
请参考以下链接以了解另一种编程方式:https://dev59.com/E2025IYBdhLWcg3wclm- - LCJ
1
我不知道是谁想出了这个 metadata=res:,然后又用到了 res=somethingelse 和到处都是 " 的语法 - 但他们应该真的很高兴现在不在同一个房间里和我面对面 :-/ - Simon_Weaver
2018年,.Net EF Core出现了类似的语法错误 - SqlClient连接字符串不需要providerName。此外,EF Core字符串中没有引号或反引号。 - Sql Surfer
6个回答

340

1
如果您将连接字符串传递给ObjectContent类,请确保它有单引号。如果您从.config文件中获取连接,则可以使用“\”转义序列。 - Mike Stonis
对于那些不熟悉XML工作原理的人来说,"是一个转义序列,用于表示引号,因为在XML中它是一个保留字符。 - Vivian River
System.Data.EntityClient.EntityConnectionStringBuilder 为我所用,谢谢。 - AFract
你的帖子中的博客链接让我了解了EntityConnectionStringBuilder类。谢谢。+1。 - RBT
对于我们这些 XAML 新手来说非常有帮助。 - Ketan Dubey
你救了我的一天..!! 可以使用单引号或双引号。 - RollerCosta

38
我通过将EntityClient改回SqlClient来解决了这个问题,尽管我正在使用Entity Framework。

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

<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
6
上述更改可能会导致(就像我遇到的情况一样)出现以下错误:“上下文正在与从EDMX文件生成的用于数据库优先或模型优先开发的代码一起以Code First模式使用”。 - Psi-Ed
你可以在 OnModelCreating() 中添加注释 throw new 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;,但现在它显示未找到密钥:provider name。我也尝试过使用providerName=...代替provider name=,但没有成功。 - Can Poyrazoğlu
2
好的,我开始使用EntityConnectionStringBuilder类创建它,奇怪的是,现在它正在工作。但是我仍然不知道为什么它没有接受我的字符串,即使加了你的东西。 - Can Poyrazoğlu

3
相信或不相信,将LinqPad.exe.config重命名为LinqPad.config就解决了这个问题。

13
这是微软,任何事情都有可能发生! - Altaf Patel
这没有意义。Linqpad与问题有什么关系,重命名可执行文件又如何有助于解决问题? - Gert Arnold
在我的情况下,这个特定的错误发生在 Linqpad 中,采取以下步骤解决了该问题。我没有重命名可执行文件,而是将 .exe.config 重命名为 .config。 - Sameer Alibhai
无论如何,这是一个非常特定的情况。它只会产生噪音,因为它并没有“解释”任何事情。 - Gert Arnold

2

请确保在连接字符串中使用Data Source而不是DataSource。这个空格很重要。相信我,我是个白痴。


1

只需要使用 \" 而不是 ",这样就可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接