2009-08-20 20 views
4

プロジェクトでEntityFrameworkを使用して、Mysqlデータベースに接続します。プロバイダーはDevart Dot.connectです。データベースを変更する方法 - Entity Framework(mysqlデータベース)で使用されるスキーマ?

このアプリケーションは、実行時にユーザーが指定した接続パラメータを使用してデータベースに接続する必要があります。これにはもちろんMysqlデータベース名も含まれます。

私はEntityConnectionStringBuilerとEntityConnectionクラスを使用してカスタム接続パラメータを構築して格納しました。

このようなパラメータを指定しても、ビジュアルスタジオウィザードを使用してEntityModelを設計するとき、アプリケーションは常にデータベースに接続してしまうという問題があります。 非常に奇妙なのは、ObjectContextの状態をデバッグしてチェックするときに、カスタム接続パラメータが正しく使用されているということです。 それは私を怒らせる!!!!! 手掛かりはありますか?

+0

コードサンプルがhelpful-はそれをしないだろう実際には*作業*デバッグ時に、またはObjectContextに正しい接続文字列を表示するだけですか? –

答えて

9

この問題で1日を過ごした後、私はついにこの問題がmodel.edmxファイルから来ていることを理解しました。

このファイルには、エンティティセットごとに1行があります。 各EntitySet要素には、schemaという属性があります。タイプ= "表の" スキーマ= "MyDatabaseという":

のEntitySet名= "annee_civile" EntityType = "openemisModel.Store.annee_civile" ストアは:SQL Serverの場合、この属性は、関連テーブルのスキーマに設定されています/>

あなたはEntityConnectionを所有constructiongスキーマの名前を提供する場合、そこに矛盾があり、最終的には、EDMXファイルで定義されたスキーマは、あなたが別のものを指定した場合にも使用されることをことを思え接続パラメータ

解決策は、単にedmxファイル内のスキーマの名前を削除することです。 これはMYSQLで動作しますが、SQLサーバに接続しているとは限りません。

のEntitySet NAME = "annee_civile" EntityType = "openemisModel.Store.annee_civile" 店舗:タイプ= "表" スキーマ= "" />

EntityConnectionStringBuilder:

string provideString = "ユーザーID = xxxx;パスワード= xxx;ホスト= xxxx;データベース= anydatabasename"; EntityConnectionStringBuilder entityConnBuilder =新しいEntityConnectionStringBuilder(); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @ "res:// /OpenEmisModel.csdl|res/ /OpenEmisModel.ssdl|res://*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = provideString;

EntityConnection及びそれを用いたオブジェクトコンテキスト:

EntityConnection entityConnexionEmis =新しいEntityConnection(entityConnBuilder。ConnectionString);

objectcontextEntities testingContext = new objectcontextEntities(entityConnexionEmis);

ソフトウェアは、任意のデータベース名に接続できるようになりました。

これが役に立ちます。

+1

DevartがdotConnect製品でこれを修正してくれることを祈っています。 – mathijsuitmegen

0

プロジェクトのdll Devart.Data.MySql.Entity.EF6.dllを参照してください。

どこかでアプリケーションが起動され、データベース操作には、以下を追加し、場所を取る前に:

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

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

using Devart.Data.MySql.Entity.Configuration; 
関連する問題