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


681

突然MetadataException、生成されたObjectContextクラスのインスタンス化を続けています。App.Configの接続文字列は正しいように見えます-前回動作してから変更されていません-基になるデータベースから変更なしで新しいモデル(edmx-file)を再生成しようとしました。

誰かアイデアはありますか?

詳細:プロパティを変更していない、出力アセンブリの名前を変更していない、アセンブリにEDMXを埋め込もうとしていません。仕事を辞めてから帰るまで10時間も待っていました。そして、それはもう機能していませんでした。

EDMXを再作成してみました。プロジェクトを再作成してみました。私はデータベースを一から作り直してみました。運がまったくない。


14
20万回を超えるビューを持つ特定の製品について質問がある場合、その製品はユーザーの期待どおりに機能していません。Microsoftがこれに対処することを期待しています。時間がある場合にアドバイスを提供するためのリンクは、visualstudio.uservoice.com / forums / 121579-visual-studioです。
トニーL.

私の問題は、db-layerプロジェクトからコピーされた接続文字列を置き換えることで解決しました。
Hardik 2018

回答:


856

これは、アプリケーションがEDMXをロードできないことを意味します。これにはいくつかの原因があります。

  • モデルのMetadataArtifactProcessingプロパティを[出力ディレクトリにコピー]に変更した可能性があります。
  • 接続文字列が間違っている可能性があります。あなたはそれを変更していないと言っていますが、他のもの(たとえば、アセンブリの名前)を変更した場合でも、まだ間違っている可能性があります。
  • ポストコンパイルタスクを使用してEDMXをアセンブリに埋め込んでいる可能性がありますが、なんらかの理由で動作していません。

簡単に言うと、正確な答えを出すには質問に十分な詳細情報がありませんが、うまくいけば、これらのアイデアは正しい方向に進むはずです。

アップデート:私は書いているトラブルシューティングのためのより完全な手順でブログ記事を


70
れたconnectionStringは、コンテンツ・比較ユーティリティで最後の時間を比較するための私の努力にもかかわらず、だった間違いました。
J.スティーン

16
それは私にとっても接続文字列でした。独自のApp.configでも接続を必要とする統合テストがある場合、edmxを更新すると、同期が取れなくなる可能性があります。
レイ

11
OK、単に「Embed」を設定することで修正しました。コンパイルしてから、もう一方にリセットします。それで問題は解決しました。
Shimmy Weitzhandler

6
同じ問題があり、あなたの解決策を試して、+ 1を与えたいと思っていました。以前にこの問題があったことを覚えていません;)。今回は、私の場合、edmxを使用したクラスライブラリでは正しい接続文字列であり、Webアプリケーションで使用した場合は間違っていました。
Episodex 2012年

9
素晴らしいガイド。私にとっては、res:// * / Database.MyModel2 ...を使用する別の接続文字列をコピーしましたが、本当にres:// * / MyModel1 ...が必要でした(データベースは統合テストプロジェクト内のフォルダーです)
2013年

360

この小さな変更は、この問題に役立ちます。

3つのプロジェクトでソリューションがあります。

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

への変更

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

11
それは私のためにそれを修正しましたが、一体何を意味していますか?
ランスフィッシャー


4
@jocull:いいえ、多くの場合機能せず、他の場合は遅くなります。その理由を理解するには、私のブログ投稿を読んでください。
Craig Stuntz

6
.edmxをModelフォルダーに移動し、接続文字列を更新するのを忘れました。素晴らしいポインタ。ありがとう。理解するのに私には何時間もかかっただろう。
2012年

11
あなたは非常に腹を立てている消費者から貧しいマイクロソフト従業員を救いました。
マフィンマン

115

Edmxが1つのプロジェクトにあり、それを別のプロジェクトから使用している場合、この例外が発生する可能性があります。

その理由はRes://*/、CURRENTアセンブリ内のリソースを指すURIです。Edmがそれを使用しているコードとは異なるアセンブリで定義されている場合、リソースが見つからないため、res:// * /は機能しません。

'*'を指定する代わりに、代わりにアセンブリの完全な名前(公開キートークンを含む)を提供する必要があります。例えば:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

接続文字列を作成するより良い方法は、EntityConnectionStringBuilderを使用することです。

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

それでも例外が発生する場合は、リフレクターでアセンブリを開き、.csdl、.ssdl、および.mslファイルのファイル名を確認してください。リソースの名前がメタデータ値で指定されたものと異なる場合、リソースは機能しません。


8
アセンブリで名前空間を使用する場合、 "YourEdmxFileName"は修飾名である必要があることを考慮してください(例: "YourNamespace.YourEdmxFileName")。ただし、アセンブリの名前に等しい名前空間の部分を削除する必要があります。
Marcelは、

5
MSDNは2番目の段落が間違っていると言います。「ワイルドカード(*)を使用する場合、Entity Frameworkはすべてのアセンブリを調べて、正しい名前のリソースを探す必要があります。」
Craig Stuntz、2010

名前空間は関係ないと思いますが、埋め込みファイルのパスは関係しています。したがって、関連するedmxファイルの* .Designer.csファイルを調べて、自動生成されたクラスの名前空間がMyCompany ...であることに気づいたとしても、それは使用すべきものではありません。代わりに、パスはアセンブリ名、ソリューションフォルダー名/ファイル名です。例:「metadata = res:// * / EntityModels。<filename> .csdl |」+ "res:// * / EntityModels。<filename> .ssdl |" + "res:// * / EntityModels。<filename> .msl;"
ダニエル

1
@Daniel、それはほとんど正しいですが、名前空間と埋め込まれたファイルのパスが時々同じであることに注意してください。あなたは確かにリフレクター(またはそれの無料の代替品)で見る必要があります。
Craig Stuntz、2011年

バージョン、publickeytokenなどなしで、アセンブリ名のみを使用して機能するように見えます。例:res://MyAssembly/folder.<filename>.csdl...
Ivan Ferrer Villa

67

同様のエラーが発生しました。私はプロジェクト(長い話)を再作成し、古いプロジェクトからすべてを引き継ぎました。以前は自分のモデルが「Model」という名前のディレクトリにあり、現在は「Models」という名前のディレクトリにあることに気づかなかった。Web.Configの接続をこれから変更したら:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

これに:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

すべてが機能しました(に変更されModelましたModels)。この文字列のこの3つの場所を変更する必要があったことに注意してください。


2
Entity FrameworkモデルをModelからDALに移動しました。しかし、Linq述語ビルダーをテストするために、テストプロジェクトでテスト(1週間後)を書いたとき。このエラーが発生しました。3つの場所で言ったように、メインプロジェクトのweb.configでテストプロジェクトApp.configがどのように見えるかを修正しました。だからあなたの簡単な答えは私を軌道に乗せた。
PatrikLindström、2012年

はい、ありがとうございます。ファイル名を確認してください。どういうわけか私は古い名前を持っていました。
PeterX 2013

7
2つの違いはありますか?
Erwin Rooijakkers 2013

2
@ErwinRooijakkers Model vs ModelS
Marc

Craigのブログを読んだ後から同じことをしたことがわかりましたが、「エンティティ」クラスライブラリに加えられた変更は、それを参照するプロジェクトの構成ファイルに自動的に加えられないことを覚えておくことが重要です。/ため息うれしい私は一人じゃない。
ruffin

26

そして、リフレクターなしでモデル名をチェックする簡単な方法....ディレクトリを探します

... obj / {config output} / edmxResourcesToEmbed

そして、.csdl、.msl、および.ssdlリソースファイルがそこにあることを確認します。サブディレクトリにある場合は、サブディレクトリの名前をモデル名の前に付ける必要があります。

たとえば、私の3つのリソースファイルはサブディレクトリDataにあるため、接続文字列は

metadata = res:// * / Data .MyModel.csdl | res:// * / Data .MyModel.ssdl | res:// * / Data .MyModel.msl;

(メタデータと比較して= res://*/MyModel.csdl | res://*/MyModel.ssdl | res://*/MyModel.msl;)。


これはまさに私の問題でした。これで数時間を失った。この簡単な説明、どうもありがとうございました
フェルナンド

すばらしい答えです。実際に文字列を見つける方法を説明しています。また、サブフォルダに「。」があることを示しています。「\」や「/」ではなく、区切り文字として。
cjb110 2018

16

私にもこの問題がありました。これは、web.configの接続文字列が、EDMXが配置されているアセンブリのapp.configの接続文字列と少し異なっていたためです。なぜ変更されたかはわかりませんが、ここに2つの異なるバージョンがあります。

App.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

修正されたのは、単にapp.config文字列(最後の小さな違いに注意してください-" App=EntityFramework"欲しい " application name=EntityFramework" ではなく)をweb.configにコピーすることでしたが、問題は解決されました。:)


1
ありがとう、これは本当に私の問題でした。EFでDBにアクセスする1つのプロジェクトと、別のプロジェクトWCFがありました。最初のプロジェクトの名前を変更した後、最初のプロジェクトのApp.configでconnectionStringが変更されました。そのため、web.configでプロジェクトWCFのconnectionStringも変更する必要がありました:)
Volkan

docs.microsoft.com/en-us/dotnet/framework/data/adonet/…に関するMSDNドキュメントから:The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.Entity Framework接続文字列はその柔軟性を共有していないため、期待するキーワードのみを使用する必要があります。
Suncat2000

13

これは、edmxファイルのビルドアクション(IDEの[プロパティ]に表示されます)を誤って「EntityDeploy」から「なし」に切り替えたときに発生しました。EntityDeployは、メタデータを設定するものです。http://msdn.microsoft.com/en-us/library/cc982037.aspxを参照してください


これは私の修正でした-コピーしてedoldの名前を.oldに変更し、いくつかのことを試していました。その後、名前を変更してビルドアクションに戻したときに、自己にnoneが設定されたため、このエラーが発生し、EntityDeployが解決されました。私の問題:)
eth0

EDMXファイルを別のフォルダーに移動し、ビルドアクションを変更して埋め込みリソース名も更新する必要がありました。ありがとう!
David

これが私の解決策でした。.NET Standardにアップグレードする過程でその設定を失ってしまいました。私の正気を救ってくれてありがとう!
NetherGranite

11

これは、新しい.edmxデザイナーをビルドする前にソリューションをクリーンアップしないと起こります。新しい.edmxデザイナーを構築する前に、ソリューションをクリーンアップすることを忘れないでください。これにより、この問題に関する多くの問題をスキップできます。Visual Studioを初めて使用する場合に備えて、ナビゲーションの詳細を以下に示します。

クリック->ビルド->クリーンソリューション

次に、クリック->ビルド->ソリューションの再構築

お役に立てれば。みんな、ありがとう


8

私はこれで30分の幸せを過ごしました。私はエンティティオブジェクトの名前を変更し、構成ファイルのエントリの名前を変更しましたが、それ以外にも... csdlへの参照も変更する必要があります

非常に見逃しやすい-名前を変更する場合は、すべてを取得してください ...


6

私も同じ問題を抱えていました。リフレクターでコンパイル済みのdllを調べたところ、リソースの名前が正しくないことがわかりました。名前を変更しましたが、問題はありません。


6

私の場合、edmxファイルのプロパティを変更することで解決します。

  1. edmxファイルを開く
  2. EDMXデザイナーの任意の場所を右クリック
  3. プロパティを選択
  4. 「メタデータアーティファクト処理」というプロパティを「出力アセンブリに埋め込む」に更新

これで問題は解決しました。問題は、コンテナがメタデータを見つけようとしたときに、それが見つからないことです。そのため、同じアセンブリで作成するだけです。edmxファイルが別のアセンブリにある場合、このソリューションは機能しません


+1,000,000これは、今日私にとって根本的な問題でした。製品の名前空間の再編成とアセンブリの統合の痛み。
マイク

6

私はこのエラーに丸一日費やしました

あなたが働いているなら n-tear architecture

またはseparate ModelsEDMXフォームDataAccessLayerで生成しようとしましたDomainModelLayer

多分あなたはこのエラーを受け取るでしょう

  1. トラブルシューティングの最初のステップでは、中に必ず接続文字列を作ることであるwebconfig (UILayer)appconfig (DataAccessLayer)同じです
  2. 非常に重要な2番目 connection string

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

    それが問題です

地球上のどこから、Modelまたは接続文字列の.csdl からどこにあるか

ここで私は私たちの解決策を写真で見て

ここに画像の説明を入力してください

あなたの助けを願っています


5

Visual Studio 2010、VB.net(ASP.NET)4.0でこれを解決できました。

エンティティモデルウィザードの実行中に、エンティティ接続文字列を確認できます。そこから、コピーして接続文字列に貼り付けることができます。

欠けているのは「App_Code」だけでした。接続文字列内。

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

残念ながら、ウィザードの接続文字列はapp.configでは正しくありません。@leqidはモデルへのパスを修正する良い方法を提案しました。
Der_Meister 2014

5

何時間もグーグルで解決しようとしても、提案された解決策はどれもうまくいきませんでした。ここにいくつかの解決策を挙げました。私もうまくいったものを書きました。(私はEFバージョン6.1.1とSQL Server 2014を使用していましたが、古いDBです)

  1. プロジェクトを再構築して、再試行してください。
  2. VSを閉じて開く-これがどのように機能するのかわかりません
  3. .EDMXファイルをディレクトリ内に配置した場合は、ConnectionStringにディレクトリを含めてください。たとえば、私のものはDALフォルダ内にあります。SOは次のようになりますconnectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(これらはファイルです。それらを表示するには、〜/ obj / ..ディレクトリの下のソリューションエクスプローラーで[すべてのファイルを表示]を切り替えることができます)。

...そして私が試した他の多くの[[例:EntityFrameworkのバージョンを新しいバージョンに戻す(それについては不明)]]


私のために働いたもの:

ここのこの記事から、それは私の問題を解決するのに役立ちました。EDMXファイルでProviderManifestToken="2012"ProviderManifestToken="2008"に変更しました。これをする:

ソリューションエクスプローラー

  1. ファイル.edmxを右クリックします。
  2. で開く
  3. エディターXML
  4. 2008でProviderManifestToken = "XXXX"を変更します

お役に立てば幸いです。


一見何も変更を加えなかったため、最近この問題が発生しました。VSを再起動して無用にしようとしましたが、その後、クリーニングと再構築によって修正されました。したがって、他の人にとって、変更を加えず、残りのどれも関連性がないと思われる場合は、クリーン/再構築を試してください。
グレッグ、

5

別のプロジェクトのedmxを使用している場合は、接続文字列で変更します...

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

...に...

metadata=res://*/DataModel.csdl

これは本当です、それを新しいプロジェクトのサブフォルダーに移動したい場合は、そのfolder.subfolder前に追加する必要があります。
qakmak

おかげで、この解決策は私にとってうまくいきました。あるプロジェクトのdirから別のプロジェクトのルートに.edmxファイルを移動し、ソリューション全体のすべての接続文字列からdir名を削除する必要がありました。
Chris

4

最終的な解決策は(他の2台のマシン、およびEDMXと他の雑貨でデータベースを再作成した後でも)、Entity Frameworkの最初のエディションを使用しないことでした。.NET 4.0で再度評価することを楽しみにしています。

もう一度同じ問題出会い、答えを探してみたところ、ようやく同じ問題を抱えている人を見つけました。接続文字列がVisual Studioのウィザードによって正しく生成されておらず、メタデータリソースへのリンクに重要なパスが欠落しているようです。

v1.0バグ?:指定されたメタデータリソースをロードできません。スクリプト!=モデル

2013-01-16の更新:EFコードファーストプラクティスをほぼ排他的に使用するように移行したため(既存のデータベースを使用している場合も)、この問題は問題ではなくなりました。私にとって、これは自動生成されたコードと構成からの混乱を減らし、製品に対する私自身の制御を高めるための実行可能なソリューションでした。


4

私の問題と解決策、症状は「指定されたメタデータリソースをロードできません」と同じでしたが、根本的な原因は異なりました。ソリューションには2つのプロジェクトがあり、1つはEntityModelで、もう1つはソリューションです。実際にEntityModelのEDMXファイルを削除して再作成しました。

解決策は、Webアプリケーションプロジェクトに戻り、この行を構成ファイルに追加する必要があったことです。新しいモデルでは、「その他」のプロジェクトのWeb.Configファイルに複製する必要があるいくつかの項目が変更されていました。古い構成はもはや良くありませんでした。

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4

プロジェクトでこのエラーが発生することがあります。私はそれを解決します

1-EDMXファイルを右クリック

2- Run Custom Toolオプションを選択

3-プロジェクトを再構築


これは私にとってはうまくいきましたが、後で再構築する必要もありました
rdans

3

私の場合、この問題は、モデルのedmxファイルの名前を変更することに関連していました... csdl / ssdl / mslファイルのapp.config接続文字列を修正すると、問題が修正されました。

EF 4.0デザイナーを使用してcsdl / ssdl / mslを生成している場合、これらの3つの「ファイル」は実際にはモデルのメインedmxファイル内に保存されます。この場合、Waqasによる投稿はかなり目立っています。彼の例の「Model_Name」は、モデルの.edmxファイルの現在の名前(.edmxなし)に変更する必要があることを理解することが重要です。

また、edmxファイルがプロジェクトのルートレベルにない場合は、Model_Nameの前に相対パスを付ける必要があります。例:

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

csdl / ssdl / msl xmlが「MyModel」という名前のフォルダーに格納されているモデルファイル「WidgetModel.edmx」に格納されていることを指定します。


3

このヘルパークラスは、ObjectContextオブジェクトを使用しているプロジェクトとは別のプロジェクトで定義されている場合に、それらのインスタンスを作成するために作成しました。構成ファイルの接続文字列を解析し、「*」を完全なアセンブリ名に置き換えます。

オブジェクトを構築するためにリフレクションを使用するため、完全ではありませんが、私が見つけた最も一般的な方法です。

それが誰かを助けることを願っています。

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

3

みんなのため SelftrackingEntitiesユーザーの場合、Microsoftウォークスルーを実行し、Objectコンテキストクラスを(コンテキスト.ttにリンクすることによって)wcfサービスプロジェクトに分離した場合、この答えはあなたのためです:

次のようなコードを含むこの投稿に示されている回答の一部:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

あなたのために動作しません!! その理由は、YourObjectContextType.Assembly現在、(wcfプロジェクトアセンブリ内の)別のアセンブリに存在しているためです。

だからあなたはYourObjectContextType.Assembly.FullName ->に置き換えるべきです

ClassTypeThatResidesInEdmProject.Assembly.FullName 

楽しんで。


2

私はこの同じエラーメッセージで問題を抱えていました。Visual Studio 2010を閉じて再度開くことで問題が解決しました。


2

アセンブリの名前を変更したため、同じ問題がありました。

また、プロジェクトのProperties / AssemblyInfo.csのAssemblyTitleおよびAssemblyProduct属性で名前を変更し、edmxファイルへの参照を削除して再度追加する必要がありました。

その後、それはうまくいきました。


2

同じ問題で、データベースからedmxを再作成しました。私の問題を解決します。


2
残念ながら、それは原因ではなく、症状に対処して扱います。
Clarice Bouwer、2014年


1

私もリックと同じ問題と解決策がありましたが、既存の.edmxを新しいプロジェクトにインポートしていましたが、ベース名前空間は問題ではありませんでしたが、別のサブディレクトリにインポートされたため、接続も更新する必要がありました。異なるサブディレクトリの名前を含めるために、Web.Config内の3つの場所の文字列:


1

プロジェクトがソリューションルートに移動されたときに、ソリューションフォルダーにプロジェクトを含むソリューションで同じ問題が発生しました(プロジェクトの場所に起因するMvc3AppConverterの疑わしいバグを克服するため)。

すべての*プロジェクト参照の後にコンパイルされたソリューションは必要に応じて再度追加されましたが、Webサイトが起動したときにエラーがスローされました。

EDMXは移動されたプロジェクトの1つ(「データ」プロジェクト)にありますが、もちろん、データプロジェクトへの参照がないためにコンパイルエラーは発生せず、実行時エラーが発生しました。

欠落している参照をプライマリプロジェクトに追加するだけでこの問題は解決しました。接続を編集する必要はまったくありません。

これが他の誰かの役に立つことを願っています。


1

私は、データアクセス層とユーザーインターフェイス層を分離していました。したがって、各レイヤーにエンティティ接続文字列があります。

これら2つの分離された接続文字列を同じになるように変更する前に、以下のエラーが見つかりました。

Unable to load the specified metadata resource

だから私はそれらの2つのレイヤー(DAL、UI)で同じ接続文字列になるようにしています、それは完璧に機能します。

私の解決策は、すべての接続文字列がすでにどこに表示されていても同じになるようにすることです。


1

昨日この問題が発生し、デバッグ中のコードとSQ​​Lプロファイラーからの出力を見ていました。

この投稿を読んで理解する前に理解できなかったのは、DBを呼び出しているときにEntityFrameworkがこのエラーをスローした理由です。SQLプロファイラーの何百行にもわたって、データベースモデルの何が問題かを調べようとしていました。期待していた電話のようなものが見つからず、正直なところ、何を探しているのかわかりませんでした。

この位置にいる場合は、接続文字列を確認してください。私の推測では、EntityFrameworkがそのSQLを作成する前に、接続文字列のメタデータ部分で指定されているモデルをチェックします。私の場合、それは間違っていました。EntityFrameworkは、DBにまで至っていませんでした。

名前が正しいことを確認してください。それを整理したら、SQLプロファイラーにApplicationNameが 'EntityFramework'である呼び出しが表示され、SQLが期待されるテーブルを呼び出していました。


1

不十分なapp.configまたはweb.configファイルでこれを行うことができます。私は、app.config接続文字列をUIのweb.configにコピーして、次のように入力しました。

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