質問: 私はMySQLデータベースに接続するためにプロジェクトでEntityFrameworkを使用します。プロバイダはDevart Dot.connectです。 このアプリケーションは、実行時にユーザーが指定した接続パラメータを使用してデータベースに接続する必要があります。これはもちろんMysqlデータベース名を含みます。 私はEntityConnectionStringBuilerクラスとEntityConnectionクラスを使用して、カスタム接続パラメータを作成して格納しました。 問題は、このようなパラメータを指定しても、ビジュアルスタジオウィザードを使用してEntityModelを設計するときに指定されたデータベースにアプリケーションが常に接続することです。非常に奇妙なことは、ObjectContextのデバッグやステータスのチェックをするときに、カスタムの接続パラメータが正しく使われているということです。どんな手掛かり ?
回答: この問題に1日費やした後、私は問題がmodel.edmxファイルから来ていることをついに理解するようになりました。 このファイルでは、EntitySetごとに1行あります。各EntitySet要素には、schemaという属性があります。 SQL Serverの場合、この属性は関連テーブルスキーマに設定されます。 > EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store:Type = "テーブル" Schema = "mydatabase" /> > > EntityConnectionを作成するときにスキーマの名前を指定すると、競合が発生し、接続パラメータで別のスキーマを指定しても、最後にedmxファイルで定義されているスキーマが使用されるように見えます。 解決策は、単にedmxファイル内のスキーマの名前を削除することです。これはMYSQLで動作します。おそらくSQLサーバーに接続するときではありません。 > EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store:Type = "テーブル" Schema = "" /> > > EntityConnectionStringBuilder: > string providedString = "ユーザーID = xxxx;パスワード= xxx;ホスト= xxxx;データベース= anyデータベース名"; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder(); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @ "res:// */OpenEmisModel.csdl|res://* /OpenEmisModel.ssdl|res://*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = providedString; > > EntityConnectionとそれを使用するオブジェクトコンテキスト > EntityConnection entityConnexionEmis = new EntityConnection(entityConnBuilder.ConnectionString); > > objectcontextEntities testingContext = new objectcontextEntities(entityConnexionEmis); > > ソフトウェアは現在、任意のデータベース名に接続することができます。 お役に立てれば。