データベースを変更する方法 - Entity Frameworkが使用するスキーマ(mysqlデータベース)?

c# connection database entity-framework mysql

質問

私は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);

ソフトウェアは現在、任意のデータベース名に接続することができます。

お役に立てれば。


人気のある回答

プロジェクト内のdll Devart.Data.MySql.Entity.EF6.dllを参照します。

アプリケーションが起動してデータベース操作が行われる前のどこかに、以下を追加します。

var config = MySqlEntityProviderConfig.Instance;
config.Workarounds.IgnoreSchemaName = true;

あなたが参照する必要があります:

using Devart.Data.MySql.Entity.Configuration;


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ