2

ハマった。解決するのにほぼ1日を費やしましたが、役に立ちませんでした。

問題: エンティティ フレームワークを使用して実稼働データベースに接続しています。

私は開発時にうまく接続します。

<add name="DefaultConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MONDO;Integrated Security=True" providerName="System.Data.SqlClient" />

<add name="MONDOEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=MONDO;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

本番環境に移行して、(本番環境の web.config ファイルから) 既存の「DefaultConnectionString」パラメーター (ID とパスワード) を使用して、MONDOEntities 接続文字列を編集しました。(これを実行できますか?) また、MONDOEntities のメタデータを拡張して、.csdl、.ssdl、.msl を含め、接頭辞として (これも実行できますか?) MONDO を付けました。太字の部分は、dev web.config から production web.config への変更です。*注: 以下の connectionStrings は Visual Studio によって作成されたものではありません。実稼働側で機能するように自分でいくつかの情報を変更しただけです。

<add connectionString="Data Source=MPOC\SQLEXPRESS;Database=Mondo;User ID=xxx;Password=xxxxx;" name="DefaultConnectionString" />

<add name="MONDOEntities" connectionString="metadata=res://*/MONDO.csdl|res://*/MONDO.ssdl|res://*/MONDO.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MPOC\SQLEXPRESS;persist security info=True;Database=Mondo;User ID=xxx;Password=xxxxx;MultipleActiveResultSets=Tru e;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

エラー メッセージは次のとおりです。指定されたメタデータ リソースを読み込めません。

Line 62: /// Initializes a new MONDOEntities object using the connection string found      in the 'MONDOEntities' section of the application configuration file.
Line 63: /// </summary>
Line 64: public MONDOEntities() : 

質問: connectionStrings を手動で変更するだけでよいですか、それともコンパイル プロセスを実行する必要がありますか? これはウェブサイトのプロジェクトなので、本番環境にアップロードした後、その場でコンパイルされます。ローカルの開発用コンピューターではプリコンパイルされません。要するに、運用中のデータベースのエンティティ接続に適切な connectionString を設定するにはどうすればよいでしょうか。


私は、既存の Web サイトを学習する必要があるプロジェクトに参加しています。私は最初のバグ修正を行っており、ado.net について学習したので、エンティティ データ モデルを作成し、コードをいくつか変更しました。開発中はすべてがスムーズに機能します。

ファイルを本番環境に移動すると、次のエラーが発生します。

"The specified default EntityContainer name 'MONDOEntities' could not be found in the mapping and metadata information.
Parameter name: defaultContainerName"

このエラー メッセージをグーグル検索し、いくつかの調査結果に基づいて、以下に示す「メタデータ」を展開しました。これは私にとっては暗いショットのようなものでした:

ORIGINAL (エンティティ データ モデルを作成したときに web.config で自動生成):

connectionString="metadata=res://*

NEW(私はこれを編集/追加しました):

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

これは最初のエラーを乗り越えたようで、新しいエラーメッセージが表示されます(OPに投稿されています):

Unable to load the specified metadata resource.

Line 62: /// Initializes a new MONDOEntities object using the connection string found     in the 'MONDOEntities' section of the application configuration file.
Line 63: /// </summary>
Line 64: public MONDOEntities() :

私のメタデータ情報に問題があると思います。ただし、元の自動生成された connectString には「metadata=res://*」しか含まれていないため、これを修正する方法が本当にわかりません。実際、これが問題の根源であるとは確信が持てません。

要するに、私のエンティティ モデルは開発ではスムーズに動作しますが、運用環境では接続されません。どんな考えでも大歓迎です...ありがとう。

4

1 に答える 1

0

接続文字列は、実行する変換を定義していないか、操作するカスタム フックがある限り、コンパイルとは関係ありません。そうそう、手動で変更できます。

おそらくそれらのメタデータが間違っているので、試してみてください(例:接頭辞を削除します)。

また、実稼働環境で、正しい connectionString がロードされ、MONDOEntities によって使用されていることを絶対に確信していますか?

于 2012-07-17T19:03:14.307 に答える