1

エンティティ フレームワーク デザイナー ダイアグラムを作成し、データベースを生成しようとしたときに、パスワードで保護された MySql データベースへの接続をセットアップする必要がありました。自動生成された文字列に機密性の高い接続データを含めないことを選択したため、App.config にパスワードのない接続文字列を取得しました。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DomainContainer" connectionString="metadata=res://*/Domain.csdl|res://*/Domain.ssdl|res://*/Domain.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;User Id=the_user;database=the_db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

明らかに、次のように ObjectContext をインスタンス化すると:

var dc = new DomainContainer();

MySql は認証を必要とするため、例外 (「基になるプロバイダーが Open で失敗しました。」) が発生します。App.config から接続文字列を削除し、代わりにインスタンス化コードを次のように変更するとします。

var connectionString = string.Format("metadata=res://*/Domain.csdl|res://*/Domain.ssdl|res://*/Domain.msl;provider=MySql.Data.MySqlClient;provider connection string=\";server=localhost;User Id=the_user;Password={0};database=the_db\"", password);
var dc = new DomainContainer(connectionString);

その後、ObjectContext はデータベースに接続し、変更を正しく永続化できます (現時点では、挿入のみを実行しようとしました)。

これがコードで接続文字列を提供する推奨される方法ではないことはわかっています。代わりに、接続文字列ビルダーを使用する必要があります。ただし、App.config 提供の接続文字列からコード提供の接続文字列に切り替える過程で、providerName="System.Data.EntityClient" の情報が失われ、それでも Entity Framework が動作しているように見えることを指摘したいと思います。正しく。それで、その情報は何らかの意味で冗長ですか?

更新 (おそらく無関係)

MySQLインストーラーを再実行して、インストールが正常に行われたことを再確認し、パスワード認証なしで新しいMySQLユーザーを追加しました(ちなみに、そのようなオプションはありませんでした)。代わりに、MySQL インストーラーが保留中の更新 (MySQL for Visual Studio 1.0.2) をインストールしたため、インストールが破損したようです。数分前には正常に動作していたプログラムが、今まで見たことのない ArgumentException を発生させます。

The specified store provider cannot be found in the configuration, or is not valid.

アップデートにアップデート

インストーラーがシステムの異なるディレクトリに同じ MySQL アセンブリのいくつかのコピーを作成したようです。たぶんランタイムが混乱しますか?ただし、次を App.config に追加すると、問題が解決します。

  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider"
           invariant="MySql.Data.MySqlClient"
           description=".Net Framework Data Provider for MySQL"
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>

Visual Studio のエラー コンソールにまだエラー メッセージが表示されますが、

Errore  1   Errore 175: Il provider dell'archivio specificato non è stato trovato nella configurazione oppure non è valido. C:\Users\Dario\Documents\Programming\EFTest\EFTest\Domain.edmx  7   5   EFTest

Updateで言及されている例外と同じように聞こえますが、私の言語にローカライズされています。

4

0 に答える 0