我有一个运行SqlServer的ASP.NET MVC2应用程序。我需要支持多个数据库(SqlServer,Mysql和Oracle)。所有数据库的架构都相同。
edmx配置为与SqlServer一起运行,因此我添加了两个新的ssdl文件:一个用于MYSQL,另一个用于Oracle。 使用SQLSERVER我可以运行应用程序,但是当我尝试在运行时设置连接字符串和元数据以配置MYSQL时,它会生成异常:
我将如何改变ssdl来实现这一目标?
答案 0 :(得分:0)
我不知道如何专门针对MySql进行此操作,但这是我为实现Sql Server和Oracle的多数据库支持所做的工作。我相信同样的方法也适用于MySql。我希望您知道如何设置Oracle客户端配置。更改应用程序配置文件中的活动连接字符串是我需要做的唯一目标。
1)针对Sql Server生成edmx。
2)为Oracle生成.ssdl和.msl文件。后者包含实体属性映射。需要在ssdl for Oracle中更改数据类型。有关详细信息,请参阅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="DATA SOURCE=MYDS;USER ID=****;Password=****;Max Pool Size=**;Connection Timeout=120""
providerName="System.Data.EntityClient"/>
4)为上下文创建默认构造函数:
public CustomDb()
: base("name=MyConnectionString")
{
Configuration.ProxyCreationEnabled = false;
}