2014-09-25 125 views
2

我有一個運行SqlServer的ASP.NET MVC2應用程序。我需要支持多個數據庫(SqlServer,Mysql和Oracle)。所有數據庫的模式都是相同的。 enter image description here使用實體框架支持多個數據庫服務器

edmx配置爲與SqlServer一起運行,所以我添加了兩個新的ssdl文件:一個用於MYSQL,一個用於Oracle。 隨着SQLSERVER我可以運行應用程序,但是當我嘗試在運行時設置連接字符串和元數據與MYSQL配置它產生的異常: location of exception

我怎麼會去改變SSDL要做到這一點?

回答

0

我不知道如何專門爲MySql做這件事,但這是我爲了實現對Sql Server和Oracle的多個數據庫支持所做的。我相信同樣的方法也適用於MySql。我希望你知道如何設置Oracle客戶端配置。更改應用程序配置文件中的活動連接字符串是我需要做的,以定位不同的數據庫。

1)生成針對Sql Server的edmx。

2)爲Oracle生成.ssdl和.msl文件。後者包含實體屬性映射。數據類型需要在Oracle的ssdl中進行更改。有關詳細信息,請參閱this鏈接。在我的情況下,Oracle ssdl文件需要具有正確的提供程序配置:Provider="Oracle.ManagedDataAccess.Client"

3)在應用程序配置文件中爲Oracle數據庫連接創建新的連接字符串。命名空間在這裏輸入正確至關重要。下面是一個工作示例:

<add name="MyConnectionString" 
     connectionString="metadata=res://*/CustomDb.csdl|res://CustomDbProject/CustomDbNamespace.CustomDb.ssdl|res://CustomDbProject/CustomDbNamespace.CustomDb.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string=&quot;DATA SOURCE=MYDS;USER ID=****;Password=****;Max Pool Size=**;Connection Timeout=120&quot;" 
     providerName="System.Data.EntityClient"/> 

4)創建上下文中的默認構造函數:

public CustomDb() 
    : base("name=MyConnectionString") 
{ 
    Configuration.ProxyCreationEnabled = false; 
}