实体框架:具有相同模式的多个DB

时间:2014-12-02 12:31:56

标签: sql-server entity-framework asp.net-web-api dbcontext multiple-databases

我刚刚创建了一个ASP.NET MVC 4& WebAPI项目。之后我将.edmx数据源添加到项目中。

我有多个具有相同架构的数据库。动态地我想使用EF中提供的默认构造函数替换连接字符串。

但是在Model1.Designer.cs中,每次我收到类似&#34的错误;具有相同签名的会员已经宣布"。

我无法解决这个问题。

2 个答案:

答案 0 :(得分:2)

是的,它有效!您需要更改的是connection string

我刚试过它以满足自己的好奇心。

以下是我采取的步骤:
1.取一个existing databasecreate a model 2.创建一个新的空数据库 3.在SQL Management Studio中右键单击第一个数据库 - >任务 - > Export Data。将所有数据导出到新创建的数据库中 4.从第二个数据库中删除一些记录 5.编写此代码:

    TMS_MiscEntities db = new TMS_MiscEntities();
    TMS_MiscEntities dbCopy = new TMS_MiscEntities();
    dbCopy.Database.Connection.ConnectionString = db.Database.Connection.ConnectionString.Replace("initial catalog=TMS_Misc", "initial catalog=TMS_Misc_new");

    Response.Write(string.Format("DB 1 records: {0}<br/>", db.ZipCodes.Count()));
    Response.Write(string.Format("DB 2 records: {0}<br/>", dbCopy.ZipCodes.Count()));

6。检查结果:

DB 1 records: 869164
DB 2 records: 868709

7。得出结论它有效:)

这是我的连接字符串的外观:

<add name="TMS_MiscEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ws2008;initial catalog=TMS_Misc;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

答案 1 :(得分:1)

我正在使用Entity Framework 6.1.3。我在我的DbContext中添加了一个带有字符串参数的构造函数。此字符串可以是存储在App.config中的连接的名称,也可以是完整的连接字符串。像这样:

public partial class MyDBContext : DbContext
{
    public MyDBContext(string connectionString)
        : base(connectionString)
    {
    }

   // DbSets, OnModelCreating, etc 
}

就我而言,我管理一个多租户应用程序,并使用ContextFactory构建正确的连接字符串并返回我初始化的上下文。

public class ContextFactory
{
    public MyDbContext GetContext()
    {
        string connectionString;
        // do some stuff here
        return new MyDbContext(connectionString);
    }
}