2009-08-20 185 views
4

我在項目中使用EntityFramework來連接到Mysql數據庫。提供商是Devart Dot.connect。如何更改數據庫 - 實體框架(mysql數據庫)使用的模式?

此應用程序需要使用用戶在運行時給出的連接參數連接到數據庫。這當然包括Mysql數據庫名稱。

我使用EntityConnectionStringBuiler和EntityConnection類來構建和存儲自定義連接參數。

問題是,即使使用這樣的給定參數,應用程序始終連接到使用Visual Studio嚮導設計EntityModel時命名的數據庫。 非常奇怪的是,當調試和檢查ObjectContext的狀態時,自定義連接參數被正確使用... 這讓我很生氣!!!!! 任何線索?

+0

一個代碼示例將helpful-做它實際上*工作*在調試時,或者只是在ObjectContext中顯示正確的連接字符串? – 2009-08-20 16:03:53

回答

9

在這個問題上花了一天之後,我終於明白,問題來自model.edmx文件。

在這個文件中,每個實體集有一行。 在每個EntitySet元素上都有一個名爲schema的屬性。在SQL Server的情況下,這個屬性被設置爲相關表模式:

EntitySet的名稱= 「annee_civile」 的EntityType = 「openemisModel.Store.annee_civile」 店:TYPE = 「表」 模式= 「MyDatabase的」 />

如果constructiong你自己EntityConnection時提供架構的名稱,它似乎有衝突,終於,在EDMX文件中定義的架構將即使您指定一個又一箇中使用連接參數。

該解決方案僅僅是刪除edmx文件中架構的名稱。 這是MYSQL的工作,可能不是連接到SQL服務器時。

EntitySet的名稱= 「annee_civile」 的EntityType = 「openemisModel.Store.annee_civile」 商店:種類= 「表」 模式= 「」/>

的EntityConnectionStringBuilder:

string providedString =「User Id = xxxx; Password = xxx; Host = xxxx; Database = anydatabasename」; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder();entityConnBuilder.Provider =「Devart.Data.MySql」; entityConnBuilder.Metadata = @「res:// /OpenEmisModel.csdl|resources /OpenEmisModel.ssdl|res/*/OpenEmisModel.msl」; entityConnBuilder.ProviderConnectionString = providedString;

的EntityConnection和使用它的對象上下文:entityConnBuilder

EntityConnection entityConnexionEmis =新EntityConnection(。的ConnectionString);

objectcontextEntities testingContext =新objectcontextEntities(entityConnexionEmis);

該軟件現在能夠連接到任何數據庫名。

希望這會有所幫助。

+1

我們希望Devart能夠爲他們的dotConnect產品解決這個問題。 – mathijsuitmegen 2011-12-23 10:46:57

0

參考項目的dll Devart.Data.MySql.Entity.EF6.dll。

某處當你的應用程序啓動之前的數據庫操作發生,增加以下內容:

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

您將需要參考:

using Devart.Data.MySql.Entity.Configuration; 
相關問題