如何在我的.edmx EF模型中切换多个相同的模式数据库?

时间:2013-12-10 15:24:32

标签: c# asp.net entity-framework

(我已编辑此问题,因此现在与原始问题不同。)

我有不同但相同的架构数据库。我在我的应用程序中使用.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=&quot;data source=MyServer\MySqlServer;initial catalog=MyDatabase;user id=MyUser;password=MyPassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

4 个答案:

答案 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)
    {
    }
}

然后我动态生成到不同数据库的连接字符串。因此,我能够切换数据库运行时:)