サポートされていないキーワード:Entity Framework Contextを初期化する「データソース」


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 2012

1
私はこれを思い付いたか分からないmetadata=res:、その後、res=somethingelse"場所の構文を超えるすべて-しかし、彼らは、彼らが今の私と同じ部屋にない、本当に喜んでいる必要があります: - /
Simon_Weaver

2018 .Net EF Coreの同様の構文エラー-SqlClient接続文字列ではproviderNameは必要ありませんでした。また、EFコアの文字列には引用符もティックもありません。
Sql Surfer

回答:


321

このエラーが発生した本当の理由"は、接続文字列の値が原因です。

それらを一重引用符で置き換えると、問題なく動作します。

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

(他の人が私よりも早く修正を入手できるように投稿しました。)


1
接続文字列をObjectContentクラスに渡す場合は、単一引用符が含まれていることを確認してください。.configファイルから接続を取得している場合は、"を使用してもかまいません。エスケープシーケンス。
マイクストニス

これは私のためにそれを修正したものです。
GiddyUpHorsey 2012

XMLの動作に慣れていない方の"ために、引用符のエスケープシーケンスは、XMLの予約文字であるためです。
ビビアンリバー

1
感謝の
気持ちを

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
ユーリーケルビツコフ2016

6
上記の変更により、(私の場合と同様に)次のエラーが発生する可能性があります。「データベースが最初またはモデルが最初の開発用にEDMXファイルから生成されたコードで、コードファーストモードでコンテキストが使用されています」
Psi-Ed

OnModelCreating()で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;キーが見つかりません:プロバイダー名と表示されます。私もproviderName=...代わりに試しましたprovider name=が、うまくいきませんでした。
缶Poyrazoğlu

2
さて、私はEntityConnectionStringBuilderクラスを使用してそれを作成し始めました、そして奇妙なことに、それは現在働いています。しかし、あなたの追加があっても、なぜそれが私の文字列を受け入れなかったのかはまだわかりません。
缶Poyrazoğlu

3

信じられないかもしれませんが、LinqPad.exe.configの名前をLinqPad.configに変更すると、この問題は解決しました。


12
これはマイクロソフトです、何でも起こりえます!
Altaf Patel

これは意味がありません。Linqpadは質問とどのように関係しており、実行可能ファイルの名前を変更することがどのように役立つのでしょうか?
Gert Arnold

私の場合、この特定のエラーはLinqpadで発生し、これを行うことで解決しました。そして、実行可能ファイルの名前を変更しませんでした。.exe.configの名前を.configに変更しました。
Sameer Alibhai

とにかく、それは非常に特定のシナリオです。それはしないように、それはノイズのみ追加説明は何も、
ゲルト・アーノルド


1

接続文字列に含まれてData Sourceいないことを確認DataSourceしてください。スペースは重要です。私を信じて。私はアホです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.