(我已编辑此问题,因此现在与原始问题不同。)
我有不同但相同的架构数据库。我在我的应用程序中使用.edmx实体框架模型对此模式进行了建模
总而言之,生活在多个SQL Server上的相同的数据库模式,并且能够在运行时更改我的.edmx模型的数据库连接,因此我可以在访问这些不同的数据库之间切换。
现在我想在运行时在这些不同的数据库之间切换。优选地以简单的方式。我该怎么做呢?
一步一步的教程或精确的,所有包含的代码示例将不胜感激。
以下是我的连接字符串在Web.config中的外观示例:
<add name="MyModelEntities" connectionString="metadata=res://*/Dal.ToolA.ToolATestOne.csdl|res://*/Dal.ToolA.ToolATestOne.ssdl|res://*/Dal.ToolA.ToolATestOne.msl;provider=System.Data.SqlClient;provider connection string="data source=MyServer\MySqlServer;initial catalog=MyDatabase;user id=MyUser;password=MyPassword;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
答案 0 :(得分:5)
DbContext
类有一个构造函数参数nameOrConnectionString
。根据初始化DbContext
的方式,您可以传递不同的连接字符串名称。例如,如果您将它们存储在国家/地区名称中,例如:
<connectionStrings>
<add name="YourApplication_UK" connectionString="..."/>
<add name="YourApplication_Norway" connectionString="..."/>
<add name="YourApplication_Sweden" connectionString="..."/>
</connectionStrings>
然后从代码中,您可以构造适当的连接字符串名称:
string connectionStringName = "YourApplication_" + myApplicationLocation;
var dbContext = new DbContext(connectionStringName);
答案 1 :(得分:2)
您需要做的就是根据他们想要访问的国家/地区切换默认连接字符串。只需在用户选择国家/地区后将匹配的连接字符串存储为静态变量,然后覆盖DbContext
的构造函数以始终使用该变量。
像这样:
对于连接字符串:
public static class StaticVariables
{
public static string ConnectionString { get; set; }
}
对于DbContext
构造函数:
public DbContext()
{
this(StaticVariables.ConnectionString);
}
答案 2 :(得分:0)
您可以使用如下所示的内容来更改连接字符串 http://tutorials.csharp-online.net/Connect_Data_ADO_NET%E2%80%94Change_Database_Open_Connection
如果要切换数据库,请使用方法
EntityInstance_ReviewEntities.GetContext(GetConnectionString(country));
在国家/地区值中,您可以传递当前国家/地区并获取连接字符串并将其分配给上下文。
答案 3 :(得分:0)
感谢您的回复。对不起我对这个问题的不清楚。
我现在已经想出了如何做到这一点。我找到了这两个很棒的链接。
http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx
http://bestplayah.com/entity-framework-dynamic-schema-changes-using-database-first-approach/
所以我正在创建一个构造函数,它接受一个连接字符串,作为一个具有相同名称的部分类。
public partial class MyDatabaseEntities : DbContext
{
public MyDatabaseEntities(string connectionString)
: base(connectionString)
{
}
}
然后我动态生成到不同数据库的连接字符串。因此,我能够切换数据库运行时:)