web-dev-qa-db-ja.com

Entity Framework-指定されたメタデータリソースをロードできません

これは何度も聞かれたことに気づきましたが、私の問題の底をつかむことができないようです。次のエラースタックが表示されます。

enter image description here

Dllを反映すると、次のように表示されます

enter image description here

読み取り http://blogs.teamb.com/craigstuntz/2010/08/13/38628/ csdl、msl、ssdlファイルがここに表示されることを期待することを示唆していますが、そうではありません。ただし、obj\Debug\edmxResourcesToEmbedには存在します。

それにもかかわらず、私はこれを行うことでweb.configにどこを見るかを明示的に伝えようとしました:

...connectionString="metadata=res://DllName.dll/PaymentModel.csdl|res://DllName.dll/PaymentModel.ssdl|res://DllName.dll/PaymentModel.msl;provider=System.Data.SqlClient;provider ... />

Dllが見つからないというエラーがスローされます。

アセンブリ 'DllName.dll'を解決できません。

この未解決SO質問 Assembly Model.dllを解決できません

私が最後に試したのは、メタデータの行を次のように変更することでした。

...connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider ... />

これは私が使用していないSQL CEに関するメッセージを投げました-これを回避する方法はありますか?

enter image description here

他に試すことができるものはありますか?または誰が私が間違っているのかを見ることができますか?いくつかの追加の詳細:

  • 「埋め込みリソース」に設定されたEF 6 EDMXの使用

  • 出力ディレクトリにコピー:「コピーしない」

  • メタデータアーティファクト処理:「出力アセンブリに埋め込む」

最後にこれについて-EDMXをEmbedded ResourceからEntityDeployに設定すると、これはローカルで機能しますが、ビルドサーバー上でビルドできません。これはSO質問とまったく同じエラーをスローするためです。

入力ファイルのリソースとして埋め込む概念スキーマノードが見つかりませんでした

しかし、修正は役に立たないようで、残念ながらサーバーに.NET 4.5をインストールできません。

32
Steve Newstead

だから私はこれの一番下に到達した、部分的にこれは私のせいだと思う。他の人に役立つ場合に備えて、以下で遭遇した各問題の解決策を示します。

指定されたメタデータリソースの問題をロードできません

これは、edmxモデルの 'Metadata Artifact Processing'設定を "EntityDeploy"から "Embedded Resouce"に設定したことが原因でした。

そのため、edmxファイルファイル全体をdllに埋め込み、代わりにssdl、msl、csdlファイルを生成しませんでした。

これを機能させてこれらのファイルを正しく生成するには、EntityDeployに設定する必要があると思います。ここで完璧な意味と私たちの悪いことになります。

アセンブリ 'DllName.dll'を解決できません

これは、上のコメントでAndrewによって解決されました。

入力ファイルのリソースとして埋め込む概念スキーマノードが見つかりませんでした

この問題全体の鍵はこれです。ビルドサーバーは現在Windows 2003上にあるため、.NET 4.5をインストールできません。VS2013の.NET 4.0で実行されているEF 6.1をローカルで使用していました。

しかし、何らかの理由で、4.5機能のいずれも使用せず、.NET 4フレームワークをターゲットにしていない場合でも、ビルドサーバーに.NET 4.5をインストールしてビルドする必要があるようです。

EFを4.3にダウングレードすると、短期間でこの問題が解決されました。理想的ではありませんが、うまくいきました。

15
Steve Newstead

私も同じ問題を抱えています。 EFモデルを含む.edmxファイルを別のアセンブリに移動した後、「指定されたメタデータリソースを読み込めません」というエラーが原因でした。

EFバージョン6.1

解決:

古い値:

metadata=res://*/Data.DataModel.csdl

新しい値:

metadata=res://*/DataModel.csdl

最初は、.edmxはプロジェクトのフォルダーの下にあり、プロジェクトのルートに移動しました。

42
user2523651

アセンブリの完全修飾名とその中のモデルファイルへのパスを指定する必要があります(/)、dll名ではありません

connectionString="metadata=res://Name.Of.The.Assembly, Culture=neutral, PublicKeyToken=8e2e51fcf4cf363e/Payment.PaymentModel.csdl|.........."

ssdlおよびmslについても同じ

12
Andrew

MetaDataを変更する

connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;

connectionString="metadata=res://*/;

上記の変更により問題が修正されます

9
Sathish

私は同じ問題を抱えていました

System.Data.MetadataException:指定されたメタデータリソースをロードできません

以前に生成された接続文字列には、edmxのすべての名前が含まれていました。接続文字列からすべてのモデル名を取り出し、メタデータに以下の文字列のみを残しました

"metadata=res://*/;provider=System.Data.SqlClient;provider

これは私のために働いた。

7
rvgenius

解決 :
1)Visual Studioから.edmxファイルを開きます。
2)任意の場所をクリックします。
3)edmxプロパティウィンドウが表示されます。
4)名前空間を正しいフォルダー名に変更します。
5) 1https://i.stack.imgur.com/6sZvo.png (詳細については画像を選択してください)。

6
Geniuslead

dotnet CLIを使用している場合

新しいdotnet buildツールを使用してEntity Framework 6.xベースのプロジェクトをビルドする新しいビジターの場合、現在 メタデータは埋め込まない が最終ビルドにあることを知ってください。したがって、VS内から実行する場合は実行されますが、CIスクリプトがdotnetを使用する場合、msbuildに戻るまでサーバーで失敗します。私見、これはバグであり、ツールはこれを処理する必要があります。必要に応じて、GitHubスレッドでチャイムできます。

5
DeepSpace101

Entity Framework接続文字列が有効データベースを指していたのに、実際にはこの同じエラーを受け取りましたが、それはincorrrectデータベースでした。

SQL Serverに次のインスタンスがある場合:

  • MyDatabase1
  • MyDatabase2

接続文字列が、.EDMXが接続され、生成された同じデータベースを指していることを確認してください。十分明らかなようですが、1つのプロジェクトから別のプロジェクトにEF接続設定をコピーすると、このエラーが発生し、最終的な結果はUnable to load the specified metadata resourceメッセージでした。正しいデータベースとアセンブリを指す正しい接続文字列を使用すると、エラーは解決しました。

最も簡単な方法は、.configの隣にある.EDMXファイルで作成された接続文字列を使用し、微妙または軽微な脱落/間違いを確実にするために必要な場所にコピーすることです。 EFが正しくロード/接続されない原因となります。

3
atconway

同じエラーが発生していました。私の接続文字列は次のとおりでした

 <add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

私はそれを次のように変更し、問題を修正しました

<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;"
       providerName="System.Data.SqlClient"/>
2
Ravi Verma

また、edmxファイルをWebアプリケーションからデータレイヤーに移動するとき(web.config-connection/app.config-connection)、データレイヤーとwebserviceレイヤーの接続文字列を変更することに注意してください。 (そうでない場合は、2つの異なる接続文字列を使用します。これにより、このような問題が発生します)

2
Raymond Fraikin

Visual Studio 2013でEF6を使用しました。次の手順を実行して、これを解決しました。

  • エンティティモデルを右クリックします
  • XML(テキスト)エディターで開く
  • タグセットProviderManifestToken="2008"
  • ビルドソリューション

それがあなたのために働くことを願っています。

1
Bikash Kumar

私はこの問題にぶつかり、何度も何度も噛みついてきました。それをどうやって修正するかをいつも忘れています。

必要なのは、開始ページとしてdefault.aspxを設定することだけです。

明らかにこれはすべての人に役立つわけではありませんが、私の場合、私の設定、接続文字列をチェックする道を進んでいます...

これが誰かを助けてくれることを願っています。あるいは、少なくとも次回グーグルを検索するときには、修正が見つかるでしょう。 :)

1
Gina Marano

私はコードを他の開発者と共有していますが、彼はこの問題を抱えていました。接続文字列の違いはありません。すべてのファイルはOKです...私は設定して修正しました

  • メタデータアーティファクト処理:「出力アセンブリに埋め込む」から「出力ディレクトリにコピー」、
  • プロジェクトの再構築、
  • そして再び設定し直します。

これは、個々のファイル(CSDL/MSL/SSDLファイル)が「出力ディレクトリにコピー」を使用したときに出力ディレクトリに作成されたため、うまくいったと思います。どうやら、組み込みバージョンが機能するために必要なバグがあったようです。お役に立てれば :)

1
davaus

接続文字列「metadata = res」はEdmx名と同じである必要があります。例えば

metadata=res://*/EmployeeModel.csdl 

このEDMX名はEmployeeModelでなければなりません

1
Rajeev

私の経験を共有するどうやって解決したかにしたい。私の場合、私はコピーと貼り付け my 接続文字列 on 運用サーバーであるために起こります。私のアプリケーションはEntity frameworkを使用していました。

問題はメタデータにありました

エンティティモデルを「BetModel」と命名しましたが、接続文字列では「Entity」-「res:///Entity.csdl|res:/」を使用していました//Entity.ssdl|res://*/Entity.msl 'on' metadata '(理由は、コピーして貼り付けたためです)。

だから私の間違ったConnectionStringは:

connectionString="metadata=res://*/Entity.csdl|res://*/Entity.ssdl|res://*/Entity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;"

修正されたConnectionStringは次のとおりでした。

<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
0
yogihosting

ソース管理からコードをプルダウンした後、開発マシン間を移動するときに、これに何度か遭遇しました。通常、EDMXファイルを含むプロジェクトを明示的に再構築する必要があります。

0
voidsstr